皆さん、始めまして。
関連[QNo.7692303]
上記にて関数を使って整形する方法をご回答いただきました。
今回は当時よりも便利性をあげ、エクセルのVBAを使ったものを作成したく質問させて頂きます。
テキストファイル(サンプルは下記参照)を読み込み、使いやすいようにエクセルへはめ込むのが目標です。
VBAは初心者なので、お忙しい中恐縮では御座いますが、ご教授いただければと存じます。
少ないデータで作成できたら、本番データへ拡張していきながらさらに理解を深められればと考えております。
[環境]
Windows7 / Excel2007
[テキストデータサンプル]
下記に貼り付けたように条件によって出力方法が違うデータがあります。
・処理番号内でレコードが1つのものは項目がたてに並んでいる。
・処理番号内でレコードが2つ以上になると項目が横にならぶ。
・記録、日時、年齢、地域の値はすべて可変
・本来のデータは10項目以上あるが、サンプルデータとして4つ抜粋して下記に表記しています。
処理番号 : 001-H20120910001
処理記録
----------------------
記録 日時 年齢 地域
0 20120712 63 東京
1 20120912 63 東京
(結果数 = 2)
--- END
処理番号 : 001-H20120919999
処理記録
----------------------
記録 = 0
日時 = 20120909
年齢 = 19
地域 = 神奈川
(結果数 = 1)
--- END
処理番号 : 001-H20110910009
処理記録なし
--- END
処理番号 : 001-H20109190022
処理記録
----------------------
記録 = 3
日時 = 20101109
年齢 = 26
地域 = 茨城
(結果数 = 1)
--- END
処理番号 : 001-H20120910022
処理記録
----------------------
記録 日時 年齢 地域
0 20120712 63 東京
1 20120912 63 栃木
5 20120917 63 和歌山
(結果数 = 3)
--- END
[実行後に得たい情報]
処理番号で検索し、その中のデータを下記ならびでエクセルデータに変換したいと考えています。
A列 B列 C列 D列 E列
001-H20120910001 0 20120712 63 東京
001-H20120910001 1 20120912 63 東京
001-H20120919999 0 20120909 19 神奈川
001-H20110910009
001-H20109190022 3 20101109 26 茨城
001-H20120910022 0 20120712 63 東京
001-H20120910022 1 20120912 63 栃木
001-H20120910022 5 20120917 63 和歌山
エクセルのマクロは勉強をし始めたばかりで初心者程度の知識ですが、
もしよろしければご回答、ご助言いただければと存じます。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
たたき台って言ったのに。
。。1. A列に文字列として、テキストデータを取り込む
2. 1行目を挿入
3. B2セルに
=IF(A2="--- END","",
IF(LEFT(A2,4)="処理番号",RIGHT(A2,16),
IF(ISNUMBER(LEFT(A2,1)*1),LEFT(B1,16)&" "&A2,
B1&REPT(SUBSTITUTE(A2,"記録 =","",1),LEFT(A2,4)="記録 =")&
REPT(RIGHT(A2,9),LEFT(A2,4)="日時 =")&
REPT(SUBSTITUTE(A2,"年齢 =","",1),LEFT(A2,4)="年齢 =")&
REPT(SUBSTITUTE(A2,"地域 =","",1),LEFT(A2,4)="地域 ="))))
下へオートフィル
4. C3セルに
=IF(B3=B2,"",IF(ISNUMBER(LEFT(A3,1)*1),B3,
IF(AND(A3="--- END",B2<>INDEX(C:C,ROW()-4)),B2,"")))
下へオートフィル
5. オートフィルタ (空白以外のセル)
6. コピーして別シートに貼り付け
7. データ 区切り位置 [レ]スペース
マクロの自動記録の助けになればよいかな。
#なんでこのようなデータがテキストデータとして出力されるのか不思議
大変失礼いたしました。
たたき台と記載してくださったのにすみません。
マクロの記録で実際にご教授頂いたものを登録して
VBAの内容を確認してみました。
ファイルの読み込み関してはファイル選択できるように下記のように作って付け足して実施しました。
Sub FileOpen()
Dim OpenFile As String
Dim buf As String
ChDir "C:\Users\s00718319\Documents\新しいフォルダー"
OpenFile = Application.GetOpenFilename("*,*.*")
Open OpenFile For Input As #1
Do Until EOF(1)
Line Input #1, buf
n = n + 1
Cells(n, 1) = buf
Loop
Close #1
End Sub
すでにご回答いただいている様なので#3の方へも御礼させて頂きます。
No.2
- 回答日時:
URLを晴れ、そこのAが見たい!!
No.3
- 回答日時:
#1です
A列にテキストデータを文字列として取り込んだあと
Sub ほとんど数式です()
Dim n As Long
n = Range("A" & Rows.Count).End(xlUp).Row
Range("B2:B" & n).Formula = "=IF(A2=""--- END"",""""," & _
"IF(LEFT(A2,4)=""処理番号"",RIGHT(A2,16)," & _
"IF(ISNUMBER(LEFT(A2,1)*1),LEFT(B1,16)&"" ""&A2," & _
"B1&REPT(SUBSTITUTE(A2,""記録 ="","""",1),LEFT(A2,4)=""記録 ="")&" & _
"REPT(RIGHT(A2,9),LEFT(A2,4)=""日時 ="")&" & _
"REPT(SUBSTITUTE(A2,""年齢 ="","""",1),LEFT(A2,4)=""年齢 ="")&" & _
"REPT(SUBSTITUTE(A2,""地域 ="","""",1),LEFT(A2,4)=""地域 =""))))"
Range("C3:C" & n).Formula = "=IF(B3=B2,"""",IF(ISNUMBER(LEFT(A3,1)*1),B3," & _
"IF(AND(A3=""--- END"",B2<>INDEX(C:C,ROW()-4)),B2,"""")))"
Range("C3:C" & n).AutoFilter Field:=1, Criteria1:="<>"
Range(Range("C3").Offset(1), Range("C3").End(xlDown)).Copy
Sheets("Sheet2").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1)), _
TrailingMinusNumbers:=True
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
Rows("1:1").Insert
Columns("A:E").EntireColumn.AutoFit
End Sub
REPT関数はIF関数に置き換えたほうが分かりよいかも
http://oshiete.goo.ne.jp/qa/7692303.html
この回答への補足
ご回答頂いてから、ファイルの読み込み、WorkBook/Sheetの追加、ActiveCellの選択など勉強し、マクロを完成させる事ができました。
これで基本的な動きが勉強できました。
ファイルcheckをファイル名からおこなったり、読み込んだファイルによって処理をかえるコードの書き方などを追加で勉強していこうと思います。
実際のデータが65万行あったのでつくったマクロでは4時間くらい待っても処理が終わりませんでした。。
テキストファイル自体は1行ずつ読み込む形にしたので、
全部読み込まず1行ごとに処理をいれたら関数の計算部分の負荷がさがって
処理がおわるようになるでしょうか。
そもそもデータ大きすぎるのでアクセスの勉強をすべきなのか・・・・
まだまだ初心者ですが、色々試してみようと思います!
お忙しい中ご回答ありがとうございます!
以前の回答からマクロの登録で実施し中身を確認すると
フィルター部分など使いにくい感じだったので早速明日試してみます。
また余談ですが、読み込み時に"--- END"が"=--- END"となり、Cellにformulが入ったようになって
IF文などの引っかからない事があったので、形式を指定して読み込む方法も勉強してみようと思います。
No.4
- 回答日時:
1行ずつは考えていなく、テキストデータをすべてExcelにインポートしてからの作業を考えていました
どのように編集されたかわかりませんが、いずれにせよ当方VBA不得意なので数式に頼っています。
言い忘れましたが、文字列としてインポートするには、先に、セルの書式を文字列にしておく必要があります。インポートの方法によりますが、インポート時に文字列に設定してあげます。
表示をさせなくすることで、計算速度を上げられます
Sub Macro1()
Application.ScreenUpdating = False
' 内容
Application.ScreenUpdating = True
End Sub
VBAに関しての詳しいことは、よくわかりませんので調べてくださいm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Windows 7 エクセルで重複データから抽出したい 2 2022/05/18 23:31
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
もしかして
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
Do~Loopした回数をカウントしたい
-
switch の範囲指定
-
VBAでセルに値が入力されるまで...
-
メルカリのメルカードで買い物...
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
リョウ・・・量?料?
-
Loadイベント中にほかのイベン...
-
findは動くがfindnextがマクロ...
-
自分の不注意で仕事で乗り合い...
-
VBの質問#if 0 then ってどう...
-
EXCEL VBA マクロ 実行する度に...
-
[ホルマール」って何ですか
-
VBA SaveChanges 上書きされない
-
vba 空のデータをSplitする時の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
メルカリのメルカードで買い物...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
DoEventsがやはり分からない
-
VBの質問#if 0 then ってどう...
-
UMLでの例外処理
-
Do~Loopした回数をカウントしたい
-
VB.NET Excelを読み込んでDataT...
-
月度は何て読みますか?
-
findは動くがfindnextがマクロ...
-
リョウ・・・量?料?
-
iD
-
VBA SaveChanges 上書きされない
-
Select Case文でこのようなこと...
-
Loadイベント中にほかのイベン...
-
セルの値が0はクリアするマクロ
おすすめ情報