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

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

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

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

Q&A

解決済

2回答

1620閲覧

テキストエディタから範囲を指定して読み込ませた内容をエクセルに出力する方法がわかりません

uho1234

総合スコア11

VBA

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

0グッド

0クリップ

投稿2018/06/27 10:38

前提・実現したいこと

テキストエディタを部分的に読み込ませてエクセルに出力するやり方を教えて頂きたいです。

{*/計算1*/
123456, /*数値
12.3, /*数値
356751, /*数値
45321, /*数値

{*/計算2*/

上記のような計算1から計算10まであるようなテキストエディタの内容から数値の部分だけ取り出してエクセルに出力する方法が実現できずに悩んでいます
ちなみに計算1が初めの行ではなく途中部分です

試したこと

ここに問題に対して試したこと

Pryvate Sub push1()
Dim Name As Variant
Dim buf As string, C As Long

Name = Application.GetOpenFilename("txtファイル,*.txt")

Open Name For Input As #1
Do until EOF(1)
Line Input #1, buf
C = C+1
Worksheets("sheets1")

End Sub

テキストエディタの全文は読み込ませることができたのですがここから部分的に読み込ませるやり方が分かりません。
計算1から10まで全部の数値だけを読み込ませて出力したいです。

先頭と終わりの文字を検索して読み込むのかなと思ったのですが、vba始めたばかりで色々試したものの出来ませんでした。 どなたか教えて頂けると助かります。

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

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

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

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

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

guest

回答2

0

1行読み込んだ後に、分解して求めているデータが含まれているか判定すればよいでしょう。
以下はカンマで分解し、先頭データが数字であればシートに書き出す例です。

VBA

1R = 1 ' 出力開始行 2Do until EOF(1) 3 ' 1行読み込み 4 Line Input #1, buf 5 ' カンマで分解 6 cols = Split(buf, ",") 7 ' 分解した列数が1つ以上 8 If UBound(a) >= 0 Then 9 ' 先頭が数値なら 10 If IsNumeric(cols(0)) Then 11 ' ワークシートに書き出し 12 Worksheets("Sheet1").Cells(R, 1).Value = cols(0) 13 ' 出力行をインクリメント 14 R = R + 1 15 End If 16 End If 17End Sub

投稿2018/06/28 00:51

編集2018/06/28 05:31
ttyp03

総合スコア16998

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

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

uho1234

2018/06/28 05:24

回答ありがとうございます Pryvate Sub push1() Dim Name As Variant  Dim buf As string, C As Long  Dim cols As Variant   Name = Application.GetOpenFilename("txtファイル,*.txt")   Open Name For Input As #1'ファイル読み込み    C = 1 Open FileName For Input As #1 Do Until EOF(1) Line Input #1, buf cols = Split(buf, ",") If IsNumeric(cols(0)) Then Worksheets("Sheets2").Cells(C, 1).Value = cols(0) C = C + 1 Loop End If End Sub 上記のように記述してみたのですがIf IsNumeric(cols(0)) Thenの部分で イ ンデックスが有効範囲にありませんとエラーになってしまいます 間違いの指摘をお願いできないでしょうか
ttyp03

2018/06/28 05:31

すみません、空行の考慮が不足していました。 回答を修正しておくのご自分のコードに反映させてみてください。 ちなみに上記のコードはDoとIfが入れ子になってておかしいです。
uho1234

2018/06/28 06:40

ありがとうございました!大変参考になりました。
guest

0

ベストアンサー

テキストエディタの全文は読み込ませることができたのですがここから部分的に読み込ませるやり方が分かりません。
計算1から10まで全部の数値だけを読み込ませて出力したいです。

Line Input #1, buf
で1行が buf に格納されます。
これをIf文で条件にあうかどうかチェックして、
あえば、シートに書き出せばいいでしょう。

Like演算子を使うと簡単にチェックできますね。

vba

1If buf Like "*/[*]数値" Then 2 Worksheets("sheets1").Cells(C, 1).value = Val(buf) 3End If

はそのままだと、ワイルド文字と判断されるので[ ]で囲みます。


下記でどうか。

vba

1Pryvate Sub push1() 2 Dim Name As Variant 3 Dim buf As String, C As Long 4 5 Name = Application.GetOpenFilename("txtファイル,*.txt") 6 7 Open Name For Input As #1 8 Do Until EOF(1) 9 C = C + 1 10 Line Input #1, buf 11 '1文字目が数字[0-9]なら、Val関数で文字列の先頭の数値部分を取り出す。 12 If buf Like "[0-9]*" Then 13 Worksheets("sheet1").Cells(C, 1).Value = Val(buf) 14 End If 15 Loop 16 Close #1 17End Sub

2018/06/28 12:09 のコメントのテキスト例の場合は、下記の出力になる。

イメージ説明

投稿2018/06/27 12:11

編集2018/06/28 03:52
hatena19

総合スコア33715

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

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

uho1234

2018/06/27 13:42

回答ありがとうございます! ごめんなさい書き方が悪かったです テキストエディタのコメントアウトしてる数値ではなく数字の部分を抜き出したいです
efcode

2018/06/27 14:28

"*/[*]数値"はトリガーであり、必要な範囲の開始場所を見つけるだけだと思いますが {だけで始まりを見つけるならそう書き直せば良いだけだと思います。 まずはやってみて出来ない所を指摘してみてください。
uho1234

2018/06/27 15:07

回答ありがとうございます! 今はさわれないので明日やってみます!
hatena19

2018/06/27 16:09

> テキストエディタのコメントアウトしてる数値ではなく数字の部分を抜き出したいです 文章だけでは、正確に伝わりません。取り出した結果も提示してもらえますか。 あと、回答をヒントに自分てやってみて、どう出来ないかを提示してください。
uho1234

2018/06/28 03:09

分かりづらくてすいません テキストエディタの例 {*/計算1*/ 123456, /*計算 12.3, /*定数 356751, /*容量 45321, /*定数2 } {*/計算2*/ 2.33,       /*大きさ   3.3444,        〃  〃          〃  〃 } テキストエディタにc言語でソースコードが書かれています 「/*~」の部分はコメントアウト部分です 数値だとややこしかったので変えました 実際に書かれているコメントは上記のようにバラバラです エクセルに表示させたい例 123456 12.3 356751 45321 2.33 3.3444  〃 教えて頂いた文をそのままC = C+1の後に入れてみたのですがエクセルには何も出力されませんでした 入れる場所を間違えているのでしょうか?  一つできればループで同じように残りもできると考えているのですが
uho1234

2018/06/28 06:38

ありがとうございます。 実現したいことができました! 図々しくて申し訳ないのですがにもう二つお聞きしたいです 「1文字目が数字[0-9]なら~」の部分でIf buf Like "[0-9]*" Thenのどこのコードが「一文字目が」にあたるか分からなかったので宜しければ教えて頂きたいです 下記のように先頭ではなく三文字まで空白の場合がありまして三文字めから読み込ませたいです。 あと数字の後にアルファベットが付いた場合の対応はできないか教えて頂けないでしょうか {*/計算1*/ 123456f, /*計算    12.3f, /*定数    356751f, /*容量    45321f, /*定数2 }
hatena19

2018/06/28 08:23

> どこのコードが「一文字目が」にあたるか分からなかったので宜しければ教えて頂きたいです Like にカーソルを置いてF1キーを押せばヘルプが表示されるのでそれで内容を理解してください。 > 下記のように先頭ではなく三文字まで空白の場合が 先頭の空白を除去する場合は、LTrim関数を使うといいですね。 > あと数字の後にアルファベットが付いた場合の対応はできないか どのような対応をご希望でしょうか。。 アルファベットも含めて出力したいということですか。 アルファベットは f だけですか。それ以外のアルファベットもありますか。 また、1文字だけですか。 数値または数値+アルファベットの後には必ずカンマが付きますか。 そのカンマの前を切り出せばいいのですか。 どちらにしても、 後から、ポロポロと例外データを出されると困ります。無駄ややり取りを何度も繰り返すことになりますので。 まずは、すべてのデータを分析して、どのような基準で切り出せばいいのか、 例外や矛盾がないように明確な仕様を決めてください。 それができないとプログラミングはできません。
uho1234

2018/06/28 08:36

すいません。次からは気をつけます。 本当に助かりましたありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問