よく使うコード

 兎に角よく使う。良く調べるコードのメモ。

  1. 最終行、最終列を取得するコード
  2. 処理時短
  3. CSVファイルの取込
  4. CSVファイルの1文字ずつ読み込む
  5. CSVファイルの書き出し

最終行、最終列を取得するコード

最終行を取得するコード
Cells(Rows.Count, 1).End(xlUp).Row
一番下から Ctrl+↑した行番号を返す。1はA列の事。例えばB列にしたければ2にする。
Cellを指定して上から 「Ctrl + ↓」した行番号を返す方法は
Cells(1,1).End(xlDown).Row

最終列を取得するコード
Cells(1,Columns.Count).End(xlToLeft).Column
1行目の一番右のセルから「Ctrl + ←」をした列番号を返す。
Cellを指定して左から「Ctrl + →」をした列番号は
Cells(1,1).End(xlToRight).Column

参考サイト
第18回.最終行の取得(End,Rows.Count)
Excelの神髄
https://excel-ubara.com/excelvba1/EXCELVBA318.html

処理時短

‘画面更新OFF 途中で止まったらイミディエイトウィンドウで直す 
Application.ScreenUpdating = False 
‘ウエイトカーソル カーソルが点滅する時に xlDefaultで戻す
Application.Cursor = xlWait     
‘シートを選んだ時などのイベントを抑止 
Application.EnableEvents = False 
‘シートを消す時に出るメッセージを抑止       
Application.DisplayAlerts = False    
‘ワークシートの計算を止める。 戻すときはxlCalculationAutomatic
Application.Calculation = xlCalculationManual 

参考サイト
マクロVBAの開始時と終了時に指定しておくべきApplicationのプロパティ
Excelの神髄
https://excel-ubara.com/excelvba5/EXCELVBA210.html

CSVファイルの取込

CSVファイルの取込(Line Input)
C\test に以下のようなtestcsv.csvファイルを作ったとする。

Sub CSVデータの取り込み()

  Dim 行 As Long
  Dim 列 As Long
  Dim ファイル番号 As Long
  Dim ファイル名 As String
  Dim 行データ As Variant
  Dim v配列 As Variant
  Dim 配列番号 As Long
  
  行 = 1
  列 = 1
  ファイル番号 = FreeFile 'FreeFile 空き番号を探す関数
  ファイル名 = "C:\test\testcsv.csv"
  
  Open ファイル名 For Input As ファイル番号
  ActiveSheet.Cells(行, 列).Select
  
  
  Do Until EOF(1)
    Line Input #ファイル番号, 行データ
    v配列 = Split(行データ, ",")
    'v配列 = Replace(行データ,"""", "")  ' ダブルクォーテーションの削除
    列 = 1
     For 配列番号 = 0 To UBound(v配列)
        ActiveSheet.Cells(行, 列).Value = v配列(配列番号)
        列 = 列 + 1
    Next 配列番号
    行 = 行 + 1
  Loop

  Close ファイル番号

End Sub

CSVファイルの1文字ずつ読み込む

 Line Inputはカンマ区切りを途中に使われると区切る位置を間違えてしまう。1文字ずつ読んだ場合でも対応するには1文字ずつ読む方法を使う。
C\test に以下のようなtestcsv2.csvファイルを作ったとする。

Sub CSVデータを1文字ずつ読む()
  
  Dim 行 As Long
  Dim 列 As Long
  Dim ファイル住所 As String
  
  '事前に参照設定で[Microsoft Scripting Runtime]にチェックを入れる
  Dim ムサイ As New FileSystemObject
  Dim ドム As Textstream
  Dim 攻撃 As String
  Dim 連続攻撃 As String
  
  行 = 1
  列 = 1
  ファイル住所 = "C:\test\testcsv2.csv"
  
  Set ドム = ムサイ.OpenTextFile(ファイル住所, ForReading)
  
  Do Until ドム.AtEndOfStream
  
    '一文字ずつ読む
    攻撃 = ドム.Read(1)
    
    '改行ならデータを貼って行を送る
    If 攻撃 = vbCr Then
      '最初と最後の["]を取る
      ActiveSheet.Cells(行, 列) = Mid(連続攻撃, 2, Len(連続攻撃) - 2)
      連続攻撃 = ""
      'Linefeedを避ける
      ドム.Skip (1)
      '次の行データへ準備
      行 = 行 + 1
      列 = 1
    Else
      '文字をつなげる
      連続攻撃 = 連続攻撃 + 攻撃
    End If
    
    ' [",]で区切る
    If 連続攻撃 Like "*""," Then
        ActiveSheet.Cells(行, 列) = Mid(連続攻撃, 2, Len(連続攻撃) - 3)
        連続攻撃 = ""
        列 = 列 + 1
    End If
  
  Loop
  
  ドム.Close
  
  'オブジェクトの開放
  Set ドム = Nothing
 
End Sub

CSVファイルの書き出し

Dim 書き出したいシート名 As String
Dim ファイル名 As String ’フルファイルパス

’このシートだけのExcelファイルを生成して保存→Excelは保存せずに削除
Sheets(書き出したいシート名).Copy 
ActiveWorkbook.SaveAs Filename:=ファイル名 & “.csv”, FileFormat:=xlCSV
ActiveWorkbook.Close SaveChanges:=False
ThisWorkbook Activate

参考サイト
Microsoft
XlFileFormat 列挙体 (Excel)
https://learn.microsoft.com/ja-jp/office/vba/api/excel.xlfileformat

投稿日:
カテゴリー: VBA

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA