VBA関数
Loc関数

Excelマクロで必須のVBA関数を入門・初級・初心者向けに詳細解説
公開日:2013年5月以前 最終更新日:2025-06-15

Loc関数


Loc関数は、開かれているファイル内の現在の読み取り/書き込み位置(ファイルポインタの位置)を取得するために使用されます。
これにより、ファイル内のどの位置から次にデータが読み込まれるか、または書き込まれるかを知ることができます。



Loc関数の構文

Loc(filenumber)

filenumber (必須):
データ型: Integer
Open ステートメントで開かれた有効なファイル番号です。

解説・制限事項等
  • Loc 関数は、指定されたfilenumberで開かれているファイル内の現在の読み取り/書き込み位置を示すLong型の値を返します。

  • 返される値の意味は、ファイルがどのモードで開かれているかによって異なります。
    • Input または Output モードで開かれているファイル:
      ファイル内の現在読み取りまたは書き込みが行われている行番号を返します。最初の行が1、次の行が2、といった具合です。
    • Random モードで開かれているファイル:
      最後に読み取りまたは書き込みが行われたレコード番号を返します。
    • Binary または Append モードで開かれているファイル:
      最後に実行された読み取りまたは書き込み操作の後の、現在のファイルポインタ位置を返します。この位置は、ファイルの先頭が1として数えられたバイト位置です。

  • Loc 関数は、ファイル操作において、特定の場所から読み書きを再開したり、データの整合性を確認したりする際に役立ちます。

  • ファイルが有効な状態で開かれていない場合や、無効なファイル番号が指定された場合、ランタイムエラーが発生します。

Loc関数の使用例

以下のコード例では、Loc 関数を使用して、ファイルモードごとのファイルポインタ位置の取得を簡潔に示します。

Sub Loc_SimpleSample()

  Dim fileNum As Integer
  Dim filePath As String
  Dim tempStr As String
  
  filePath = ThisWorkbook.Path & "\LocTemp.txt" ' 一時ファイルパス
  
  On Error GoTo ErrorHandler ' エラーハンドラ設定

  ' --- Input/OutputモードでのLoc ---
  fileNum = FreeFile
  Open filePath For Output As #fileNum
  Print #fileNum, "Line 1"
  Print #fileNum, "Line 2"
  Close #fileNum
  
  Open filePath For Input As #fileNum
  Line Input #fileNum, tempStr ' 1行目を読み込み
  MsgBox "Inputモード (1行読み込み後): " & Loc(fileNum), vbInformation, "Loc 関数例" ' 結果: 2 (次の行番号)
  Close #fileNum

  ' --- BinaryモードでのLoc ---
  fileNum = FreeFile
  Open filePath For Binary As #fileNum
  Put #fileNum, 1, "ABCDE" ' 5バイト書き込み
  MsgBox "Binaryモード (書き込み後): " & Loc(fileNum), vbInformation, "Loc 関数例" ' 結果: 6 (次のバイト位置)
  Close #fileNum

  ' --- RandomモードでのLoc ---
  Type MySimpleRec
    ID As Long
  End Type
  Dim myRec As MySimpleRec
  
  fileNum = FreeFile
  Open filePath For Random As #fileNum Len = Len(myRec)
  myRec.ID = 100
  Put #fileNum, 1, myRec ' 1番目のレコードに書き込み
  MsgBox "Randomモード (1レコード書き込み後): " & Loc(fileNum), vbInformation, "Loc 関数例" ' 結果: 1 (アクセスしたレコード番号)
  Close #fileNum
  
  ' テストファイルを削除
  Kill filePath

  Exit Sub

ErrorHandler:
  MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "エラー"
  If fileNum <> 0 Then Close #fileNum
  If Dir(filePath) <> "" Then Kill filePath
End Sub

  • このコードは、各ファイルアクセスモード (Input/Output、Binary、Random) における Loc 関数の戻り値の違いを簡潔に示しています。
  • Input/Outputモードでは、行を読み書きした後の次の行番号が返されます。
  • Binaryモードでは、バイトを読み書きした後の次のバイト位置が返されます。
  • Randomモードでは、最後にアクセスしたレコード番号が返されます。
  • 各操作の後、MsgBoxでLoc関数の戻り値を表示し、その挙動を確認できます。
  • エラーハンドリングと一時ファイルの削除も含まれています。


※本記事の作成にあたっては、生成AI(Gemini)を活用し一部の文章作成を行っています。最終的な内容は人間による確認・編集を経て掲載しています。


Office VBA リファレンス Loc関数

※VBA関数一覧
マクロVBA関数の一覧と解説です、どんな関数があるかは一度は確認しておくとをお勧めいたします。どんな関数があるだけでも知っておけば、詳細の使い方は実際に使うときに調べても良いでしょう。文字列操作…34 分岐…3 型変換…14 データ判定…10 日付時刻…20 配列…6 ファイル操作…14 数学/財務…28 その他……



同じテーマ「VBA関数」の記事

FreeFile関数
GetAttr関数
Input関数
Loc関数
LOF関数
Seek関数
Spc関数
Tab関数
Abs関数
Int関数
Fix関数


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ