出産前後の痔にはご注意!

教えて下さい。
a(100,200)の2次元配列のデータをファイルに保存したいのですが、
a(0,0),a(0,1),a(0,2).......a(0,200)
a(1,0).......
a(2,0)...
.
.
.
a(100,0)...................a(100,200)
といった感じでカンマ区切りでCSV形式で保存したいのですが、これを簡単にファイルに保存する方法を
教えて下さい。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

; をつけないと改行されてしまうようです。



for i=0 to 100
for k=0 to 199
write #1,a(i,k);
next k
write #1,a(i,200)
next i

これでどうでしょうか?
    • good
    • 1

Writeは必ず改行が入るので、Printを使ってください。



for i=0 to 100
for k=0 to 200
Print #1, a(i,k);
If k = 200 Then
Print #1, ""
Else
Print #1, ",";
End if
next k
next i
    • good
    • 0

#2のものです。

#1の補足の
>するとデータがすべて縦に並んでしまいました
私のも縦に並びます。メモ帳などで見ると縦に
配列1つずつ並んで見えると言うことでしょうが
これは「縦に並ぶ」とは言いません。復帰改行コード
(vbCrLf)がWrite#ステートメント発行時毎に入ると言うことです。
(完成ごエクセルの表のセルに読みこませたいとは、書いてないですね。)
それでそうしたいのであれば、仮にsと言うStringを定義し
For k=1 to 200
s=""
For i=1 to 100
s=s & a(k,i) & ","
next i
s=s & vbCrLf
Print #1,s
next k
のように100まで溜め込み、復帰改行と共に書き出せばよい。
    • good
    • 0

Open "test.csv" For Output As #1


for i=0 to 100
for j=0 to 199
write #1,a(i,j),
next j
write #1,a(i,200)
next i
close #1
end
    • good
    • 0

大事なことで、処理のスタートは、どこなんでしょうか。


と言うのは、(1)プログラムの途中で、配列a(x,y)の
dim a(100)にデータが出来ていて、それをテキスト
ファイルに落としたいのか(2)紙の上にデータがあって
いまから(多分キーボードインプットで)入力して、読みこんだ時にa(x,y)の形に出きる、テキストファイルを作るのかです。
#1のお答えは(1)を前提にしているようです。
(2)で有れば、配列名aは当然入力不要で、x,yはペア
で入れることになるでしょう。また配列要素x、yはデータの中に持たなくても良いでしょうね。
x1,y1,x2,y2,x3・・・でも良いし、x1;y1,x2;y2,x3;・
でも良い。後者はセパレータは,,/,;,-など、どれか決めて
おけば良いと思う。入力手数は前者後者とも同じですが、
読み込んだ時、前者はx$,Y$で受けられる。後者はセパレータで分割せねばならない。しかし1データ飛ばして全体がずれる恐れは少ない。後者の例。テスト済み。
Sub test01()
Dim a As String
Open "c:\My Documents\aa2.txt" For Output As #1
For i = 1 To 1000
a = InputBox("(x,y)=")
If a = "end" Then GoTo ed
Write #1, a
Next i
ed:
Close #1
End Sub
復帰改行(レコード区切り)を要素1個1個に入れるかも
配列要素数がもっと多ければ、考える余地があろう。

この回答への補足

ありがとうございます
ちなみに処理のスタートは(1)です。

補足日時:2002/12/13 18:41
    • good
    • 0

ファイルをオープンしてある状態で、出力するところだけです。



for i=0 to 100
for k=0 to 199
write #1,a(i,k) & ","
next k
write #1,a(i,200)
next i

上記のように二重ループにすればいいかと思います。
ファイルに出力する部分は、ちょっと違うかもしれませんが・・・。
ま、参考程度に。

この回答への補足

ありがとうございます。
実際に試してみました。
するとデータがすべて縦に並んでしまいました。
私の説明が悪かったとは思いますがやりたいことは、
この回答を例に取ると、
for k=0 to 200 のデータを横一列にならべて、
for i=0 to 100 のデータを縦一列にならべて、
100*200のセルに当てはめるやり方が知りたいのです。
よろしくお願いします。

補足日時:2002/12/13 18:19
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVB 配列の内容をファイルに書き込む

VB2008を使用しています。
stg_bitという配列に一文字ずつ「abc・・・」
のように入っているものを、テキストファイルに出力したいのですが・・・
stg_bitという配列の内容をファイルに書き込みたいのですが、
うまくいきません。
ご教授お願いします!!


Dim i As Integer
Dim stg_str As String


Dim Writer As New IO.StreamWriter("C:sample.txt")

Writer.WriteLine(stg_bit)
Writer.Close()

Aベストアンサー

>「abc...」と改行せずに書き込む方法はどうすればよろしいでしょうか?
出力する前に改行を取り除く
strBuff = strBuff.Replace(vbCrLf, "")

また、配列の順番どおり出力するならFor Eachより、Forで指定した方がいいかもしれない。
For i As Integer = 0 To stg_bit.Length
 strBuff += stg_bit(i).Replace(vbCrLf, "")
Next i
Writer.WriteLine(strBuff)

QExcelVBAでデータを一括してセルに貼り付ける

こんばんは

ExcelVBAで教えてください。
配列のデータをセルに貼り付ける方法です。
一つ一つ行う方法は解ります。
しかし、これでは件数が多いと時間がかかってしまいます。
まとめて貼り付ける方法を教えてください。
例えば次のように100列1000行のデータのとき、一つ一つでは10万回も貼り付けることになります。
これを1行単位で1000回とか全部まとめて1回とかでできないでしょうか。
配列データを用意する都合で1行単位もお願いします。


For Row = 1 To 1000
For Column = 1 To 100
Cells(Row, Column).Value = 配列(Row - 1, Column - 1)
Next
Next

Aベストアンサー

http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_070_08.html
を参考にしてください。

Q【VBA】ExcelマクロでCSVファイルに保存したデータが""で囲まれてしまう

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim 行数 As Long, 列数 As Integer
Dim i As Integer, j As Long, k As Long

ファイル名 = "test.csv"
フォルダ名 = "csv"
パス名 = ActiveWorkbook.Path & "\" & _
フォルダ名

'csvフォルダが存在しなければ作成する
If Dir(パス名, vbDirectory) = "" Then
MkDir パス名
End If
ChDir パス名

Open ファイル名 For Output As #1

For i = 1 To Worksheets.Count
Worksheets(i).Activate
Worksheets(i).Cells(1, 1).Select
ActiveCell.CurrentRegion.Select
行数 = Selection.Rows.Count
列数 = Selection.Columns.Count

For j = 1 To 行数
For k = 1 To 列数 - 1
データ = Selection.Cells(j, k) _
.Value
Write #1, データ;
Next k
Write #1, Selection.Cells(j, 列数) _
.Value
Next j
Next i
Close #1
End Sub

添付図のような、Excel2003で作成した表内のデータを
CSVで保存するマクロを作成したのですが、
図のように、CSVファイルに「""」で値が囲まれた状態で、
保存されてしまいます。

下記にマクロを記載しますので、
どうすれば文字列が「""」で囲まれずに、
カンマ区切りだけのデータで出力されるのか、
ご存知の方おられましたら、ご教示お願い致します。

Sub csv保存()
Dim フォルダ名 As String
Dim パス名 As String
Dim ファイル名 As String
Dim データ As Variant
Dim ...続きを読む

Aベストアンサー

Write # は文字列を""で囲んで出力する仕様になっています。
そのまま出力したければ、Print #を利用すればよろしいかと。
ただし、Printの場合は区切り文字(カンマ)を自動で出力してくれませんので、併せて出力する必要があります。

For j = 1 To 行数
  For k = 1 To 列数 - 1
    データ = Selection.Cells(j, k) .Value
    Print #1, データ; ",";
  Next k
  Print #1, Selection.Cells(j, 列数).Value
Next j

なお、いらぬおせっかいですが、ドライブが複数ある環境下だと、
 ChDir パス名
だけでは必ずしもcvsフォルダ内に、ファイルが作成されるとは限りません。
 Open パス名 & "\" & ファイル名 For Output As #1
のように、フルパスで指定しておいた方が確実かと…

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QAccess VBAで読み込んだ配列をcsvファイルにエクスポート 

VBA初心者です。
Access VBAで読み込んだ配列をcsvファイルにエクスポートしているのですが、
配列が1列ずつではなく1行ずつエクスポートされてしまいます。
どこが悪いかは大体予想がつくのですが、どうすればいいか分かりません。

また、複数のファイルを読み込んで1つのファイルにエクスポートするため、
いちいち「55:ファイルは既に開かれています」と表示されます。
これもどうにかならないでしょうか?
よろしくお願いします。

Private Sub cmd_Click()
On Error GoTo Err_cmd_Click
Dim strArg() As String
Dim Contents As String
Dim ReadFileName As String
Dim WriteFileName As String
Dim i As Integer
Dim inp As Long
Dim cnt As Integer
Dim temp As String '1行のデータの仮置き

inp = Forms![フォーム1]![日付] 'フォームの非連結テキストボックスと連動


For cnt = 0 To 30
ReadFileName = "P:\dl_engine\logs1\service\" & inp + cnt
' ファイル読込
Open ReadFileName For Input As #1
Do Until EOF(1)
Line Input #1, temp
Contents = Contents & temp & vbCrLf
Loop
Close #1
strArg = Split(Contents, " ") ' スペースで分割

WriteFileName = "C:\Contents\ザ★スクリーン\auDownLoadLog.csv"
' ファイル保存
Open WriteFileName For Output As #2
For i = 0 To UBound(strArg)
Print #2, strArg(i)
Next i
Next cnt

'正常終了
Exit_cmd_Click:
Exit Sub

'エラー処理
Err_cmd_Click:
Beep
Select Case Err.Number
Case Else
MsgBox Err.Number & ":" & Err.Description
End Select
Resume Next
End Sub

VBA初心者です。
Access VBAで読み込んだ配列をcsvファイルにエクスポートしているのですが、
配列が1列ずつではなく1行ずつエクスポートされてしまいます。
どこが悪いかは大体予想がつくのですが、どうすればいいか分かりません。

また、複数のファイルを読み込んで1つのファイルにエクスポートするため、
いちいち「55:ファイルは既に開かれています」と表示されます。
これもどうにかならないでしょうか?
よろしくお願いします。

Private Sub cmd_Click()
On Error GoTo Err_cmd_Click
Dim str...続きを読む

Aベストアンサー

内容を見ると、Access2000以上と思いますが、動かす環境が無いため、机上デバッグです。
LineInputしたtempをSplitしているので、tempがデータの行単位でこれをカンマ表示すると解釈しました。
うまくいけば、Excelに読み込める。これが目的?

Access2000なら、Splitしたら『,』を使ってJoinできなかった?(Excel2000か?)


手を加えてみました。動くかな???(止まったらごめんなさい)

Private Sub cmd_Click()
  On Error GoTo Err_cmd_Click

  Dim strArg() As String
  Dim Contents As String
  Dim ReadFileName As String
  Dim WriteFileName As String
  Dim i As Integer
  Dim inp As Long
  Dim cnt As Integer
  Dim temp As String '1行のデータの仮置き

  inp = Forms![フォーム1]![日付] 'フォームの非連結テキストボックスと連動

  '============ 保存ファイルは1つのように見える。最初に宣言 =========
  WriteFileName = "C:\Contents\ザ★スクリーン\auDownLoadLog.csv"
  '保存ファイルを開く
  Open WriteFileName For Output As #2
  '===================================================================

  For cnt = 0 To 30
    ReadFileName = "P:\dl_engine\logs1\service\" & inp + cnt

    ' ファイル読込
    Open ReadFileName For Input As #1

    Do Until EOF(1)
      Line Input #1, temp

      strArg = Split(temp, " ") ' スペースで分割
      '====== CSVファイルなのでカンマで分けた文字列にする =================
      'CSVなのにカンマがない。カンマを付加する箇所を付けてみた。
      'Access2000? ならJoin関数がある?当方、Access97のためよく分からず
      'tempにスペースがない場合があるのか
      temp = strArg(0)
      For i = 1 To UBound(strArg)
        temp = temp & "," & strArg(i)
      Next i
      '====================================================================
      Contents = Contents & temp & vbCrLf
    Loop
    Close #1

    '========= 1ファイル分のデータを書く ================
    '========= ContentsにvbCrLfがあるので改行しない=======
    Print #2, Contents;
    '========= Contentsをクリア ==========================
    Contents = ""
    '=====================================================
  Next cnt

  '======= ファイルを閉じる ===
  Close
  '============================

'正常終了
Exit_cmd_Click:
  Exit Sub

'エラー処理
Err_cmd_Click:
  Beep
  Select Case Err.Number
    Case Else
      MsgBox Err.Number & ":" & Err.Description
  End Select
  Resume Next
End Sub

内容を見ると、Access2000以上と思いますが、動かす環境が無いため、机上デバッグです。
LineInputしたtempをSplitしているので、tempがデータの行単位でこれをカンマ表示すると解釈しました。
うまくいけば、Excelに読み込める。これが目的?

Access2000なら、Splitしたら『,』を使ってJoinできなかった?(Excel2000か?)


手を加えてみました。動くかな???(止まったらごめんなさい)

Private Sub cmd_Click()
  On Error GoTo Err_cmd_Click

  Dim strArg() As String
  Dim Co...続きを読む

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QVB2008: CSV を二次元配列に読み込む方法?

VB.NET を知って今日で30日目という初学者です。

付属一覧.csv

品番001, 品番001用付属1, 品番001用付属2, 品番001用付属3
品番002, 品番002用付属1, 品番002用付属2, 品番002用付属3
品番003, 品番003用付属1, 品番003用付属2, 品番003用付属3
品番004, 品番004用付属1, 品番004用付属2, 品番004用付属3
品番005, 品番005用付属1, 品番005用付属2, 品番005用付属3

今、上記のCVSファイル配列に読み込む方法を探っています。

Using MyReader As New TextFieldParser(aFile, Encoding.Default)
  While Not MyReader.EndOfData
    aLines.Add(MyReader.ReadLine())
  End While
End Using

と、ここまでは何とか回答に助けられて到達。
aLines は List です。

しかし、これは一次元配列。

Dim aFields(,) As String
ReDim aFiles(N, M) As String

とやれば、行ではなくフィールドで読めば、二次元配列も可能とは思っています。
しかし、これは N を確定する手続きが必須。

そこで質問は、そうしない妙手に関してです。
宜しくお願いします。

VB.NET を知って今日で30日目という初学者です。

付属一覧.csv

品番001, 品番001用付属1, 品番001用付属2, 品番001用付属3
品番002, 品番002用付属1, 品番002用付属2, 品番002用付属3
品番003, 品番003用付属1, 品番003用付属2, 品番003用付属3
品番004, 品番004用付属1, 品番004用付属2, 品番004用付属3
品番005, 品番005用付属1, 品番005用付属2, 品番005用付属3

今、上記のCVSファイル配列に読み込む方法を探っています。

Using MyReader As New TextFieldParser(aFile, Encoding.Default)
...続きを読む

Aベストアンサー

あー、この間から質問の意図がよく分からなかったから回答してなかったけど,やっと分かった気がする。

Option Explicit On
Option Strict On
Option Compare Binary
Option Infer Off 'VB2008から

Class Program
Shared Sub Main()
Dim aLines As System.Collections.Generic.List(Of String())
aLines = New System.Collections.Generic.List(Of String())()
Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\hoge.csv", System.Text.Encoding.Default)
MyReader.SetDelimiters(",")
  While Not MyReader.EndOfData
    aLines.Add(MyReader.ReadFields())
  End While
End Using
System.Console.WriteLine(aLines(0)(0))
System.Console.ReadKey(true)
End Sub
End Class

みたいなことがやりたいのかな?
#僕自身はList(Of String())ではなくList(Of List(Of String))を好むが
利点は特に無い。

あー、この間から質問の意図がよく分からなかったから回答してなかったけど,やっと分かった気がする。

Option Explicit On
Option Strict On
Option Compare Binary
Option Infer Off 'VB2008から

Class Program
Shared Sub Main()
Dim aLines As System.Collections.Generic.List(Of String())
aLines = New System.Collections.Generic.List(Of String())()
Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("C:\hoge.csv", System.Text.Encoding.Default)
MyReader.SetD...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング