セル内の改行を取り除く – VBA

Excelの表をCSVに変換したりデータをHTMLに変換したりする際に、
改行コードをスペースに変換したり、
に変換したりすることがあると思います。
そういう場合に、下記Replace関数にて改行コード(vbLF)を変換します。

For i = 1 To 10
    'セル内の改行コードをスペースに変換してセルに代入
    Cells(i, 1).Value = Replace(Cells(i, 1).Value, vbLf, "")
Next i
Continue Reading

ブック内に含まれる全てのシート名を取得する – VBA

開いているブックに含まれているシート名を取得する方法を2つ紹介します。
1つ目はSheetsで左側からのシート番号を指定してシート名を取得する方法。
2つ目はブックに含まれるworksheetオブジェクトを一つずつ取得して、その名前を取得する方法。
どちらも同じ様に名前を取得できますが、2つ目の方法でループ内でシートオブジェクトに対し操作を行う場合に
何かと便利になるので、個人的にはおすすめです。

'1つめの方法
For i = 1 To ThisWorkbook.Sheets.Count
    Debug.Print Sheets(i).Name
Next i

'2つめの方法
Dim sht As Worksheet

For Each sht In Worksheets
    Debug.Print "name = " & sht.Name
Next sht
Continue Reading

Excel VBA セル範囲の最終行と最終列位置を取得する – VBA

セル範囲内で最終行まで処理を行ったり、最終列の位置を調べることはよくあります。
その時に使える方法です。
最初は、xlDownとxlToRightを使えば良いと思ったのですが、途中で空白セルがあると、その手前の位置が返されてしまうので、セル範囲の最終位置ではないので、最終行や最終列から上、左という流れで取得します。

また、下記では調べる位置を10としていますが、通常は表の見出しや連番等の全て値が入っている行や列の位置を指定します。
また、変数に使う型は、Longが良いでしょう。
データが入っている行はintegerの範囲を超えることがよくあり、integerのままだとエラーになります。

Dim last_row as Long    '最終行
Dim last_column as Long '最終列1

last_row    = Cells(Rows.Count, 10).End(xlUp).Row
last_column = Cells(10, Columns.Count).End(xlToLeft).Column

msgbox "最終行 = " & last_row
msgbox "最終列 = " & last_column
Continue Reading

SheetやRangeオブジェクトからブック名を取得する方法 – VBA

SheetやRangeオブジェクトからブック名を取得する方法
SheetやRangeオブジェクトから今開いているブック名って何だっけ?という時にParentを使ってWorkbookオブジェクトから取得します。
開いているブックが一つしかないのであれば、Thisworkbook.Nameで取得できます。

   Dim sht As Worksheet 'シートオブジェクト
   Dim rng As Range     'レンジオブジェクト

   Set sht = Workbooks("Book1.xlsm").Sheets("Sheet1")
   Set rng = Workbooks("Book1.xlsm").Sheets("Sheet1").Range("A1:B1")

   MsgBox rng.Parent.Parent.Name
   MsgBox sht.Parent.Name
Continue Reading