質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

956閲覧

テキストデータからシートに特定のデータを抽出したいです。

tanuo

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/11/17 16:13

初心者で説明不足で申し訳ありません。

前提・実現したいこと

複数のテキストデータをダイアログで選択してExcelシートに読み込ませたいです。
1つの時もあれば4つの時もありフォルダも別で固まっているのでダイアログで
選択する方式が合っていると思いました。

テキストの.txtより右にあるテキスト名とデータ内のF2から下の空白になるまでを
ExcelのG10にはテキスト名
G11から下にはテキストデータ内のF2から空白になるまでのデータを読み込ませたいです。
2つ目以降のデータは
H10にテキスト名
H11から下にはテキストデータ内の・・ というように右にスライドしていってほしいです。

テキストデータは複数選択できるのを希望しています。
読み込む順番は規則性はなくてもいいです。

手作業でテキストデータを開いて貼り付けて名前を10行目に入力して…
というのをマクロで効率化できないかと考えております。

… F G H I

9
10 samA samC samD
11 2.3 3.5 2.1
12 4.4 5.3 3.3
13 2.4 4.6 5.6

発生している問題・エラーメッセージ

現状は全て手作業で行っており

・Excelシートを開く
・テキストデータをカーソルをもってきて開く
・データ内のF2から下の空白までをコピーしてシートのG11に貼り付ける
・シートのG10にテキスト名を手打ち。
・閉じて次のテキストに移る
・次のテキストを開く
・データ内のF2から下の空白までをコピーしてシートのH11に貼り付ける
・シートのH10にテキスト名を手打ち
という内容になります。

該当のソースコード

すみませんありません。

試したこと

サイトを検索して探していましたが
下記の様に複数選択で読み込むところからやっていこうとしましたが
何もできずに挫折しました。

OpenFileNames = Application.GetOpenFilename("テキストデータ,*.txt", MultiSelect:=True)
If IsArray(OpenFileNames) Then
For Each f In OpenFileNames

すみませんが御教授頂よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/11/18 01:22

> 下記の様に複数選択で読み込むところからやっていこうとしましたが > 何もできずに挫折しました。 現在手作業でやっていることをプログラムで自動化したい、という動機は大変すばらしいことですが、初心の方としては進め方に問題があります。 何もできない状態から全てやろうとするから挫折します。複数選択するところからではなく、まず1つだけのファイルから進めましょう。 1つだけのファイルを選択することすら難しいのであれば、ファイル名は固定にして、ファイルを開き、指定のセル範囲に張り付けることから始めてください。それも難しかったらもう少し分解します。単に文字列をセルに張り付けることから、とか。 現状、何もできずに挫折したというのであれば回答は1から10まで教えることになるので、敬遠もされるし低評価につながります。 「ひとつのファイルならプログラムを作れたが、複数のファイルを扱うにはどうしたら良いか分からない。」程度になれば、アドバイス(含む回答)もしやすくなります。
meg_

2020/11/18 01:23

ファイル選択処理についてはひとまず置いておいて、データ処理の方からコーディングされてはどうでしょうか?
guest

回答1

0

こんにちはこんばんは、よろしくおねがいいたします。
まず、”テキストデータ”と書いておられますが、”手作業”のところを読むとどうやらエクセルファイルのようなので、そのように理解しました。

で、こういうのはどうでしょうか?

vba

1Option Explicit 2 3Sub test() 4 5Dim FileNameList As Variant 6Dim i As Long 7Dim SourceFileName As String 8 9Dim TenkiMotoBook As Workbook 10Dim TenkiMotoFileName As String 11Dim TenkiMotoSheet As Worksheet 12Dim TenkisakiSheet As Worksheet 13 14Dim TenkiMotoRange As Range 15Set TenkisakiSheet = ThisWorkbook.Worksheets("sheet1") 16 17Dim r As Long, c As Long 18r = 10 : c = 7 'G10セルのことです 19 20FileNameList = Application.GetOpenFilename("Microsote Excelブック, *.xlsx", MultiSelect:=True) 21 22 If Not IsArray(FileNameList) Then 'キャンセルボタンが押されたとき、終了する 23 Exit Sub 24 End If 25 26 For i = 1 To UBound(FileNameList) 'ダイアログで選択した数だけループする 27 28 SourceFileName = FileNameList(i) 29 Workbooks.Open SourceFileName 'ファイルを開く 30 Set TenkiMotoBook = ActiveWorkbook 31 Set TenkiMotoSheet = ActiveWorkbook.Worksheets("sheet1") 32 33 TenkiMotoFileName = Dir(SourceFileName) 'フルパスのファイル名から、ファイル名だけを抽出する 34 '転記元のファイル名を、10行目の部分にセットする 35 TenkisakiSheet.Cells(r, c) = TenkiMotoFileName 36 37 TenkiMotoSheet.Select 38 'F2セルから下へ、データのある範囲をコピーし、転記先シートへペーストする 39 TenkiMotoSheet.Range("F2", Range("F2").End(xlDown)).Copy TenkisakiSheet.Cells(r + 1, c) 40 '転記元のブックを閉じる 41 TenkiMotoBook.Close 42 43 c = c + 1 '右の列へシフトする 44 45 Next i 46 47End Sub

当方でテストしてみました。これで動作します。お試しください。

投稿2021/01/16 09:41

AkiSaito

総合スコア110

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問