VBA関数
Seek関数

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

Seek関数


Seek関数は、開かれているファイル内で次に読み取りまたは書き込みが行われる位置(ファイルポインタの現在位置)を取得するために使用されます。
ファイル内の特定の位置から操作を開始したい場合に、現在の位置を確認するのに役立ちます。



Seek関数の構文

Seek(filenumber)

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

解説・制限事項等
  • Seek 関数は、指定されたfilenumberで開かれているファイルの次に読み取りまたは書き込みが行われるバイト位置をLong型の値として返します。
  • ファイルの先頭は 1 として数えられます。つまり、ファイルが空の状態またはファイルポインタがファイルの先頭にある場合、Seekは 1 を返します。
  • この関数は、GetやPutなどのファイルI/O操作を行った後に、ファイルポインタがどこに移動したかを確認するために特に便利です。
  • Seek関数はLoc関数と似ていますが、Loc関数がファイルモードによって返す値の意味が異なるのに対し、Seek関数は常にバイト位置を返します(Randomモードを除く)。
  • Input、Output、Append、Binary モード: 次に読み書きされるバイト位置を返します。
  • Random モード: 次に読み書きされるレコード番号を返します。ただし、これはPutまたはGetの次の操作に影響する位置であり、バイト位置ではありません。Loc関数と同じくレコード番号を返します。
  • 指定されたfilenumberが有効なファイルとして開かれていない場合、ランタイムエラーが発生します。

Seek関数の使用例

次のコード例では、Seek 関数を使って、ファイルポインタの位置がどのように変化するかを確認します。

Sub Seek_SimpleSample()

  Dim fileNum As Integer
  Dim filePath As String
  Dim dataStr As String
  Dim currentPos As Long
  
  filePath = ThisWorkbook.Path & "\SeekTest.txt" ' 一時ファイルパス
  dataStr = "ABCDEFG" ' 7バイトの文字列
  
  On Error GoTo ErrorHandler ' エラーハンドラ設定
  
  ' --- BinaryモードでのSeek ---
  fileNum = FreeFile
  Open filePath For Binary As #fileNum
  
  MsgBox "Binaryモード - ファイルオープン直後: " & Seek(fileNum), vbInformation, "Seek 関数例 (Binary)" ' 結果: 1
  
  Put #fileNum, 1, dataStr ' 1バイト目からデータを書き込み
  MsgBox "Binaryモード - 'ABCDEFG'書き込み後: " & Seek(fileNum), vbInformation, "Seek 関数例 (Binary)" ' 結果: 8 (次のバイト位置: 1 + 7 = 8)
  
  Get #fileNum, 3, dataStr ' 3バイト目からデータを読み込み
  MsgBox "Binaryモード - 3バイト目から読み込み後: " & Seek(fileNum), vbInformation, "Seek 関数例 (Binary)" ' 結果: 10 (次のバイト位置: 3 + 7 = 10)
  
  Close #fileNum
  
  ' --- RandomモードでのSeek ---
  Type MySimpleRec
    ID As Long
  End Type
  Dim myRec As MySimpleRec
  
  fileNum = FreeFile
  Open filePath For Random As #fileNum Len = Len(myRec) ' レコード長はLong型なので4バイト
  
  MsgBox "Randomモード - ファイルオープン直後: " & Seek(fileNum), vbInformation, "Seek 関数例 (Random)" ' 結果: 1
  
  myRec.ID = 100
  Put #fileNum, 1, myRec ' 1番目のレコードに書き込み
  MsgBox "Randomモード - 1番目レコード書き込み後: " & Seek(fileNum), vbInformation, "Seek 関数例 (Random)" ' 結果: 2 (次のレコード番号)
  
  Get #fileNum, 1, myRec ' 1番目のレコードを読み込み
  MsgBox "Randomモード - 1番目レコード読み込み後: " & Seek(fileNum), vbInformation, "Seek 関数例 (Random)" ' 結果: 2 (読み込み後も次のレコード番号)
  
  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

  • このコードは、テストファイルを作成し、BinaryモードとRandomモードでSeek関数の挙動を確認しています。
  • Binaryモードでは、ファイルを開いた直後は1(先頭バイト)を返し、PutやGet操作を行った後は、次に読み書きされるバイト位置を返します。
  • Randomモードでは、ファイルを開いた直後も1を返し、PutやGet操作を行った後は、次にアクセスされるレコード番号を返します。この挙動はLoc関数と同じです。
  • 各操作の後、MsgBoxでSeek関数の戻り値を表示し、その挙動を確認できます。
  • エラーハンドリングと一時ファイルの削除も含まれています。


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


Office VBA リファレンス Seek関数

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



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

Input関数
Loc関数
LOF関数
Seek関数
Spc関数
Tab関数
Abs関数
Int関数
Fix関数
Hex関数
Oct関数


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

生成AIが暴いた「VBAオワコン説」の盲点|問われるのは言語ではなく評価軸|エクセル雑感(2026-07-04)
【ITとは何か】Excel・VBAを学ぶ前に知っておきたい「4つの本質」|エクセル雑感(2026-06-24)
2つのシート名を交換するVBAをGeminiに作らせてみた。|VBA技術解説(2026-05-22)
ヘッダーに合わせて列をソートして値貼り付けするスマートな方法|VBAサンプル集(2026-05-20)
4大分岐関数の使い分け(IF/IFS/SWITCH/CHOOSE)|エクセル入門(2026-05-19)
Excel主要関数 習得難易度 10段階(文字列・日付除く)|エクセル雑感(2026-04-27)
Excelのシート5分類|エクセル雑感(2026-03-27)
グループ別に全員共通の重複期間を算出|エクセル練習問題(2026-03-12)
ハイフン区切り文字列の『最初』と『最後』を抽出・結合|エクセル練習問題(2026-02-23)
AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)


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

1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.日本の祝日一覧|Excelリファレンス
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.Excelショートカットキー一覧|Excelリファレンス
6.繰り返し処理(For Next)|VBA入門
7.RangeとCellsの使い方|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのコピー&値の貼り付け(PasteSpecial)|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」をお願いいたします。
本文下部へ