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 ・・・新着記事一覧を見る
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出|SQL入門(2025-11-02)
SQL基礎問題5:複数のマスタテーブルの結合|SQL入門(2025-11-01)
アクセスランキング ・・・ ランキング一覧を見る
1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.
