Loc関数
Loc関数は、開かれているファイル内の現在の読み取り/書き込み位置(ファイルポインタの位置)を取得するために使用されます。
これにより、ファイル内のどの位置から次にデータが読み込まれるか、または書き込まれるかを知ることができます。
Loc関数の構文
filenumber (必須):
Open ステートメントで開かれた有効なファイル番号です。
- Loc 関数は、指定されたfilenumberで開かれているファイル内の現在の読み取り/書き込み位置を示すLong型の値を返します。
- 返される値の意味は、ファイルがどのモードで開かれているかによって異なります。
- Input または Output モードで開かれているファイル:
ファイル内の現在読み取りまたは書き込みが行われている行番号を返します。最初の行が1、次の行が2、といった具合です。 - Random モードで開かれているファイル:
最後に読み取りまたは書き込みが行われたレコード番号を返します。 - Binary または Append モードで開かれているファイル:
最後に実行された読み取りまたは書き込み操作の後の、現在のファイルポインタ位置を返します。この位置は、ファイルの先頭が1として数えられたバイト位置です。
- Input または Output モードで開かれているファイル:
- 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)を活用し一部の文章作成を行っています。最終的な内容は人間による確認・編集を経て掲載しています。
同じテーマ「VBA関数」の記事
FreeFile関数
GetAttr関数
Input関数
Loc関数
LOF関数
Seek関数
Spc関数
Tab関数
Abs関数
Int関数
Fix関数
新着記事NEW ・・・新着記事一覧を見る
VBA開発の標準化を実現する共通プロンプトのすすめ|生成AI活用研究(2025-06-14)
生成AIと100本ノック 29本目:画像の挿入|生成AI活用研究(6月13日)
Excelワークシート関数全一覧(最新版)|Excelリファレンス(6月12日)
エクセル関数辞典 AI版|エクセル入門(6月10日)
生成AIと100本ノック 28本目:シートをブックに分割|生成AI活用研究(6月8日)
生成AIと脱Excelの時代:ブラックボックスと共に進む知的変革|生成AI活用研究(2025-06-08)
生成AIと100本ノック 27本目:ハイパーリンクのURL|生成AI活用研究(6月7日)
生成AIと100本ノック 26本目:ファイル一覧作成|生成AI活用研究(6月6日)
AI時代のプログラミング再考:記述の自由と知の民主化|生成AI活用研究(2025-06-06)
Excel×スプレッドシート連携:HTTP GETで学ぶGAS API設計入門|生成AI活用研究(2025-06-04)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。