アイコンに複数のファイルをドロップされて起動したとき、Commandにそのファイル名が","で区切られて格納されていたのですが、この各ファイル名を分解して一次元配列に入れたいのですが、どのような方法があるでしょうか。

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

A 回答 (2件)

Splitの使用方法です。



お手元のPCでVB6のヘルプが利用できるならそちらもご覧ください。

Command$を配列strCommandに分解するとします。

  Dim strCommand() as String

  strCommand()=Split(Command$,",")

これだけです。
何件あるか、はUBoundで検出してください。

なお、「逆」はJoinです。こちらも研究してみてくださいね。
    • good
    • 0
この回答へのお礼

お勉強になりました。どうもありがとうございました。
またお願いします。

お礼日時:2001/06/24 04:23

VB6なら文字列を配列に分解する「SPLIT」コマンドが利用できそうです。



区切り記号の初期値がカンマです。
配列に格納された件数はUboundで検出できます。
添え字が0からになることに注意してください。

この回答への補足

回答ありがとうございます。
ところでsplit関数はどうやって使うのかわかりません。
Split Command ",",-1,1
まではわかったのですが、いったいどこで配列ができるのでしょうか。
さっぱりです。

補足日時:2001/06/23 23:37
    • good
    • 0

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

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

QAccessのDAOでフィールド名を配列に格納して・・・

Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。

Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable)
Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable)

Do Until Rs1.EOF
Rs2.AddNew
Rs2!FL1 = Rs1!名前
Rs2!FL2= Rs1!性別
Rs2!FL3= Rs1!郵便番号
Rs2!FL4= Rs1!住所
   ・
   ・
Rs2! FL50= Rs1! 50番目
Rs2.Update
Rs1.MoveNext
Loop

複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述するのが大変ですし、ものすごく長いコードになります。そこで、配列にしてやったらどうだろうかとこんなことをしてみましたがだめでした。

Dim I
Dim FieldsName
FieldsName=Array("名前","性別",・・・"50番目")
           ・
           ・
Do Until Rs1.EOF
Rs2.AddNew
For I=0 To 49
Rs2!フィールド(I) = Rs1!FieldsName(I)
Next
Rs2.Update
Rs1.MoveNext
Loop

じゃあTebleDifのTd.Fields().Nameを使って・・・・やっぱり失敗しました。

For I=0 To 49
Rs2!フィールド(I) = Rs1!Td.Fields(I).Name
Next

やりたいこと分かっていただけますでしょうか?要するにフィールド名を配列の様なもので格納しておいて、レコードの追加時に50回ループさせてRS2のフィールドにいれたいのです。何か良い方法は無いでしょうか。

Access2000のDAOで下記のようなコードで複写元テーブルから複写先テーブルにデータを追加するとします。

Set Rs1 = Db.OpenRecordset("複写元", dbOpenTable)
Set Rs2 = Db.OpenRecordset("複写先", dbOpenTable)

Do Until Rs1.EOF
Rs2.AddNew
Rs2!FL1 = Rs1!名前
Rs2!FL2= Rs1!性別
Rs2!FL3= Rs1!郵便番号
Rs2!FL4= Rs1!住所
   ・
   ・
Rs2! FL50= Rs1! 50番目
Rs2.Update
Rs1.MoveNext
Loop

複写元のフィールドが50フィールドもあると、いちいちRs1!名前とかRs1!性別とか記述す...続きを読む

Aベストアンサー

#2です。

一応自分なりにコードを作ってみました。

Dim I As Integer, Db As Database, Rs1 As Recordset, Rs2 As Recordset

Set Db = CurrentDb
Set Rs1 = Db.OpenRecordset("複写元")
Set Rs2 = Db.OpenRecordset("複写先")

Do Until Rs1.EOF
Rs2.AddNew
For I = 0 To 49
Rs2.Fields(I).Value = Rs1.Fields(I).Value
Next
Rs2.Update
Rs1.MoveNext
Loop
Rs2.Close
Rs1.Close
Set Rs2 = Nothing
Set Rs1 = Nothing
Set Db = Nothing

でいいと思います。ただし、前提条件として、テーブル「複写先」を作っていないとできませんが。

ご参考までに。

Qマクロでシート名を配列に格納して比較したい

はじめまして。
 異なるファイル間でそれぞれシート名を比較して、ないものがあればそのシートを元ファイルに追加したいのです。新ファイル(任意の位置に増加シートがあります)→元ファイル(新ファイルの増加シートを新ファイルと同じ並び順で追加される)
元ファイルはすでに記入してあるものなので、単純に上書きではまずいので、上記の様な方法を採りたいのですが、大きく3点でつまずいてます。
1.シート名を配列に格納 
2.配列の比較(存在の有無)
3.同じ位置に追加
と肝心なところがダメなわけでありますがなんとか助けて頂けないでしょうか?
1.2.はたぶんこの方法かなと思ってるだけですが。(For nextの2重ループでは挫折しましたので)

 仕様はマクロ記入ファイル(FARSTBOOKとしています)からコピー先ファイル(OLDBOOKとしています)とコピー元ファイル(NEWDBOOKとしています)を開き、それぞれを配列に格納して最初の流れで進めたいのです。指定したファイルを検索させて開くことや、シートの追加等はいつもやっているのですが、今回は複数と複数の比較で困っております。どなたか力を貸してください。

はじめまして。
 異なるファイル間でそれぞれシート名を比較して、ないものがあればそのシートを元ファイルに追加したいのです。新ファイル(任意の位置に増加シートがあります)→元ファイル(新ファイルの増加シートを新ファイルと同じ並び順で追加される)
元ファイルはすでに記入してあるものなので、単純に上書きではまずいので、上記の様な方法を採りたいのですが、大きく3点でつまずいてます。
1.シート名を配列に格納 
2.配列の比較(存在の有無)
3.同じ位置に追加
と肝心なところがダメなわけで...続きを読む

Aベストアンサー

#1 です。連投すみません。

修正したものを再度掲載しておきます。

Sub Sample()

  Dim wbSrc    As Workbook
  Dim wbDst    As Workbook
  Dim shSrc    As Object
  Dim shDst    As Object
  
  Set wbSrc = Workbooks("NEWBOOK.xls") ' // コピー元
  Set wbDst = Workbooks("OLDBOOK.xls") ' // コピー先
  
  ' // まず NEWBOOK.xls にあって OLDBOOK.xls にないシートを複写
  For Each shSrc In wbSrc.Sheets
    On Error Resume Next
    Set shDst = wbDst.Sheets(shSrc.Name)
    On Error GoTo 0
    If shDst Is Nothing Then
      shSrc.Copy After:=wbDst.Sheets(wbDst.Sheets.Count)
    End If
    Set shDst = Nothing ' <---- 追加
  Next

  ' // シート並べ替え
  For Each shDst In wbDst.Sheets
    shDst.Move Before:=wbDst.Sheets(wbSrc.Sheets(shDst.Name).Index)
  Next

End Sub

#1 です。連投すみません。

修正したものを再度掲載しておきます。

Sub Sample()

  Dim wbSrc    As Workbook
  Dim wbDst    As Workbook
  Dim shSrc    As Object
  Dim shDst    As Object
  
  Set wbSrc = Workbooks("NEWBOOK.xls") ' // コピー元
  Set wbDst = Workbooks("OLDBOOK.xls") ' // コピー先
  
  ' // まず NEWBOOK.xls にあって OLDBOOK.xls にないシートを複写
  For Each shSrc In wbSrc.Sheets
    On Error Resume Next
 ...続きを読む

QVBSでTXTファイルを配列に格納し表示

ファイル名:test.txt
 内 容 :日付 数字 数字 数字 数字 数字
       日付 数字 数字 数字 数字 数字
             ・
             ・
(1)日付も090106のような数字で全て数値です。
(2)1年分250行です。
(3)全ての日付や数字の間はスペースで最後の数字で改行です。

VBSでこのテキストファイルを読み込み2次元配列に入れて、
例えば6月10日(日付が090610)の行とその次の日の行の2行を
表示するには、どのようなコードになりますか?

すいません、プログラマー学習でないためできればコードを
教えていただきたいです。宜しくお願いします。

Aベストアンサー

>プログラマー学習でない・・・
ですね
>If Left(v(i), 6) = Right(Replace(FormatDateTime("2009/6/10", 2), "/", ""),6) Then
   ↓
If Left(v(i), 6) = "090610" Then

QVBS 複数ファイル複数行を配列格納

ある配下のCSVファイル2個(固定)を読み込み、
コンピュータ名の列が同じ行を比較するというツールを作っています。

考えた結果以下まではできましたが、どうしても指定行を配列に埋め込み処理ができません。
比較方法はわかります。
ですが以下のプログラムでは、CSVの行は複数行あるので最終行しか格納されません。
どのようにしたら、2つのCSVファイルそしてすべての行を配列に入れ込むことができるのでしょうか。

For Each FileName In src.Files
FileEx = fso.GetExtensionName(FileName)
If LCase(FileEx) = "csv" Then
Set CsvFile = fso.OpenTextFile(FileName)
Do Until CsvFile.AtEndOfStream
tmpLine = CsvFile.ReadLine
If roopCnt = 0 Then '1個目のCSV
ArrayA = Split(tmpLine,",")
Else '2個目のCSV
ArrayB = Split(tmpLine,",")
End
rowCnt = rowCnt +1
Loop
roopCnt = 1
End If
Next

ある配下のCSVファイル2個(固定)を読み込み、
コンピュータ名の列が同じ行を比較するというツールを作っています。

考えた結果以下まではできましたが、どうしても指定行を配列に埋め込み処理ができません。
比較方法はわかります。
ですが以下のプログラムでは、CSVの行は複数行あるので最終行しか格納されません。
どのようにしたら、2つのCSVファイルそしてすべての行を配列に入れ込むことができるのでしょうか。

For Each FileName In src.Files
FileEx = fso.GetExtensionName(FileName)
...続きを読む

Aベストアンサー

VBScriptなら、配列はpreserveしながらRedimするのが定石かと。

詳しくは、VBScriptリファレンスなどをご覧ください。

参考URL:http://blogs.technet.com/b/heyscriptingguy/archive/2008/04/17/how-can-i-store-arrays-within-another-array.aspx

QファイルをドラッグドロップでTextBooxにファイル名を出したい

下記のサンプルコードをWEBサイトで見つけたので
ListBox1というところをTextBox1と直して
テキストボックスにファイルのフルパスが出るように
したかったのですが、Listbox1だと正常なのですが、
TextBox1に変更すると動作しなくなってしまいます。
最後の部分の
ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop))は
TextBox1.Text=e.Data.GetData(DataFormats.FileDrop)
に変更してあります。

正常に動作するにはどこを直したらよいか教えて頂きたいです。
宜しくお願いします。m(__)m
---------------------------------------------------
Private Sub ListBox1_DragEnter(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles ListBox1.DragEnter
'関連連づけの確認をしています。
'この場合、ドラッグアンドドロップの形式であるかどうか?
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
'ドロップ効果を取得
e.Effect = DragDropEffects.Copy
Else
'ドロップ効果を破棄
e.Effect = DragDropEffects.None
End If
End Sub



Private Sub ListBox1_DragDrop(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DragEventArgs) _
Handles ListBox1.DragDrop
'DragEnterイベントで、取得した情報を追加
ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop))
End Sub

下記のサンプルコードをWEBサイトで見つけたので
ListBox1というところをTextBox1と直して
テキストボックスにファイルのフルパスが出るように
したかったのですが、Listbox1だと正常なのですが、
TextBox1に変更すると動作しなくなってしまいます。
最後の部分の
ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop))は
TextBox1.Text=e.Data.GetData(DataFormats.FileDrop)
に変更してあります。

正常に動作するにはどこを直したらよいか教えて頂きたいです。
宜しくお願いします。m(...続きを読む

Aベストアンサー

VB.NETですよね。
まず、
TextBox1.AllowDrop = True
になってますか?
あとは、
Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
TextBox1.Text = e.Data.GetData(DataFormats.FileDrop)(0) 'String[]になる
End Sub
Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
If (e.Data.GetDataPresent(DataFormats.FileDrop)) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If
End Sub
でいけるはずですが

VB.NETですよね。
まず、
TextBox1.AllowDrop = True
になってますか?
あとは、
Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
TextBox1.Text = e.Data.GetData(DataFormats.FileDrop)(0) 'String[]になる
End Sub
Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
If (e.Data.GetDataPresent(Da...続きを読む


このカテゴリの人気Q&Aランキング

おすすめ情報