Txtファイルにあるデータがコンマで区切られています。並びをAからJとします。Aの前には日付が入っています。複数のテキストファイルを持ちいります。
ExcelのUserFormを使い、テキスト(拡張子Txt)のデータを列ごと取得しようと思っております。たとえば図のようにBのチェックボックスにチェックを入れ、ExecuteButton1を押すと「-509999.9987」データと日付のみ、新しいExcelファイルにデータを入れるという方法です。
並びとしましてUserForm1の中にPage1がありその中にFrame1が入って、Checkboxがあります。
ここにファイルをUploadしてみました。パスワードは1234
http://4.gigafile.nu/0609-b68df8d040f5aa34546dea …
Executeボタンを押したら、下記のような流れになればいいです。
テキストオープン>新規のExcelシートを作成する>選択したタグを列で取得する>新規のExcelシートに取得したデータを詰めて張り付ける(その時日付とデータを張り付ける)。
たとえばチックボックス1と4にチェックが入っていたとします。コンマの間と間のデータを取得しようとすると、1列目のデータは日付なので、2列目と5列目を取得したいと思いますがうまくいきません。
チェックボックスの1番目にレ点があると下記のようになります。
If Me.Controls("CheckBox1").Value = True Then
If Me.Controls("CheckBox2").Value = True Then
If Me.Controls("CheckBox3").Value = True Then
して行くと、200以上のチェックボックスがある場合それを200以上作らないといけません。
また、下記のようにすると。
.......................
For i = 1 To 200
If Me.Controls("CheckBox" & i).Value = True Then
~~~~~~~~~
else
~~~~~~~~~
next i
..........................
たとえば1と4列目が正(True)の場合であっても、テキストの中身のデータを的確に2列目と5列目を取得するのが難しいです。
どなたか簡単にできる方法を教えていただけますでしょうか。どうぞよろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.1です。
すいません。リンク先は確認していないです。どこへ飛ぶか分からないリンクはクリックしない主義なので・・・。なので、またまた独りよがりで考えてみました。
ご存知とは思いますが、Excelからテキストファイルを開くと「テキストファイルウィザード」で各種設定ができます。その中に取り込み列を削除する指定ができますが、これをVBAで設定してみました。とりあえず、MAX9列を想定して作ったので、必要に応じて増やしてください。
Private Sub CommandButton1_Click()
Dim i As Long
Dim a As Variant
a = Array(0, 0, 0, 0, 0, 0, 0, 0, 0)
For i = 1 To 9
If Me.Controls("CheckBox" & i).Value = True Then
a(i - 1) = Array(i, 1)
Else
a(i - 1) = Array(i, 9)
End If
Next i
Workbooks.OpenText Filename:="C:\Users\xxxx\test.txt", _
Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _
, Comma:=True, Space:=False, Other:=False, FieldInfo:=a, _
TrailingMinusNumbers:=True
End Sub
No.3
- 回答日時:
こんばんは。
ダウンロードしたファイルの中身のコードが未完成品ばかりでしたので、どうやら、こちらは、それを直すほど事情が分かっていないので、あえて、こちらはこちらで新たに作ったほうが早いです。人のマクロは、途中から切り出そうとしても、切り取れません。
うまくいかない理由は、様々ですが、こちらで気がついたのは、通常の方法では、20万行以上のデータを処理するのは、ハング状態になるということてす。
>1列目のデータは日付なので、2列目と5列目を取得したいと思いますがうまくいきません。
これは可能ですが、以下のコードですと、arBuf(0) =0, arBuf(1)=2, arBuf(2)=5 のように格納されます。
>テキストファイルが新しくなり、今必要なデータはは28行目と32行目です。
やって出来ない話ではないのですが、そこまで考えていません。
'/データをインポートする/
Private Sub CommandButton1_Click()
Dim arBuf()
Dim k As Long, n
Const CHKBOXCNT As Integer = 4 'チェックボックスの数
ReDim arBuf(0)
arBuf(n) = 0: n = 1
For k = 1 To CHKBOXCNT
If Me.Controls("CheckBox" & k).Value = True Then
ReDim Preserve arBuf(n) 'チェックボックスのTrueの番号
arBuf(n) = k
n = n + 1
End If
Next k
'-----------
Dim FileName As String
Dim newBk As Workbook
Dim TextLine As String
Dim i As Long, x As Long, y As Long
Dim buf
Dim textBuf As String
Dim TextLines
Dim TextRow
Const myDATA As String = "2018" '年数
With Application.FileDialog(msoFileDialogOpen)
.Filters.Clear
.Filters.Add "Select text([Data_#_Test#].txt)files", "*.txt"
.Show
If .SelectedItems.Count = 0 Then '選ばなかった時
Exit Sub
Else
FileName = .SelectedItems(1)
End If
End With
Set newBk = Workbooks.Add '新しいブックを作る
With CreateObject("Scripting.FileSystemObject")
With .GetFile(FileName).OpenAsTextStream
textBuf = .ReadAll
.Close
End With
End With '一括でTextファイルを取得
ReDim ArText(3)
x = 3 '3行目から
TextLines = Split(textBuf, vbCrLf) '行に分ける
For i = 0 To UBound(TextLines)
If TextLines(i) Like myDATA & "*" Then
TextRow = Split(TextLines(i), ",")
For Each n In arBuf
y = y + 1
newBk.Worksheets(1).Cells(x, y).Value = "'" & TextRow(n) '数字の桁が多い時の対処-文字化
Next
y = 0: x = x + 1
End If
Next i
Beep
End Sub
どうもありがとうございます。 質問があります。
「Const CHKBOXCNT As Integer = 4 'チェックボックスの数」
チェックボックスの数が4なのはどういう意味でしょうか? チェックボックス数が200以上に自動で増える時もあります。
For i = 0 To UBound(TextLines)は使えますでしょうか?
使えない場合ははどうすればよろしいですか?
また下記のこの意味をもっと詳しく、教えていただけますでしょうか?。
「ReDim arBuf(0)
arBuf(n) = 0: n = 1」
「ReDim ArText(3)」
No.1
- 回答日時:
こんなので、参考になりますか。
Sub sample()
Dim i As Long
Dim myRng As Range
Set myRng = Sheets("Sheet1").Cells(1, 1)
For i = 1 To 200
If Me.Controls("CheckBox" & i).Value = True Then
Set myRng = Union(myRng, Sheets("Sheet1").Cells(1, i + 1))
End If
Next i
myRng.EntireColumn.Copy
Sheets("Sheet2").Paste Destination:=Range("A1")
End Sub
ありがとうございます。ちょっと使ってみますが、下記のExcelファイルにはTextファイルを選択するところまで作ってあります。
その続きが知りたいのですが、確認はしていただけましたでしょうか?
http://4.gigafile.nu/0609-b68df8d040f5aa34546dea …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) マクロ実行時、自動で背景色を変えたい。 C列にあるチェックボックスをチェックするとB列に「TRUE」 4 2022/11/08 11:14
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでアクセスDBからデータの取...
-
クリスタルレポートでレコード...
-
XMLでデータとして画像を指定す...
-
富士通(汎用機)のAIMについて
-
非同期のプロセス間通信(パイプ...
-
AccessVBAでのExcelメモリ解放
-
【VB.NET】Excelの最終行までの...
-
【ExcelVBA】値を変更しながら...
-
スプレッドシートで。。。
-
Excel VBAで1週間毎にカテゴリ...
-
VB2008,DateTimePickerで指定す...
-
VB6のMsFlexGridコントロールに...
-
Excel VBA で日付を4ケタの数値...
-
【C#】textBoxの指定行のデータ...
-
VBAでメモ帳からの文字列を所定...
-
VBAコンボボックスの内容が反映...
-
oo4oによるBLOBデータ取得
-
ExcelUserFormをつかってTxtデ...
-
矩形グラフ(オシロやロジアナ...
-
部品表
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
「Nullの使い方が不正です」の...
-
XMLでデータとして画像を指定す...
-
VBAコンボボックスの内容が反映...
-
C# DataTableに最後に追加した...
-
【ExcelVBA】値を変更しながら...
-
【VB.NET】Excelの最終行までの...
-
COBOL数値転記の仕様
-
Excel VBAでフォルダ内の全テキ...
-
富士通(汎用機)のAIMについて
-
MSFlexGrid 行選択状態
-
Excel VBAで1週間毎にカテゴリ...
-
access vba 『○○件づつ表示』を...
-
Excel VBA で日付を4ケタの数値...
-
java / jsp selectedについて
-
Excel VBAでグループ毎に集計す...
-
ExcelVBAで戻り値を返すには
-
batでレジストリキーから読み取...
-
ListViewで表示されたデータの...
おすすめ情報
テキストファイルが新しくなり、今必要なデータはは28行目と32行目です。