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

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

ただいまの
回答率

90.35%

  • VBA

    1902questions

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

  • Excel

    1629questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 219

uho1234

score 3

 前提・実現したいこと

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

{*/計算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始めたばかりで色々試したものの出来ませんでした。 どなたか教えて頂けると助かります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

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

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

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

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


下記でどうか。

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)
       C = C + 1
       Line Input #1, buf
       '1文字目が数字[0-9]なら、Val関数で文字列の先頭の数値部分を取り出す。
       If buf Like "[0-9]*" Then
            Worksheets("sheet1").Cells(C, 1).Value = Val(buf)
        End If
    Loop
    Close #1
End Sub

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

イメージ説明

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/27 22:42

    回答ありがとうございます!
    ごめんなさい書き方が悪かったです

    テキストエディタのコメントアウトしてる数値ではなく数字の部分を抜き出したいです

    キャンセル

  • 2018/06/27 23:28

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

    キャンセル

  • 2018/06/28 00:07

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

    キャンセル

  • 2018/06/28 01:09

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

    キャンセル

  • 2018/06/28 12: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の後に入れてみたのですがエクセルには何も出力されませんでした
    入れる場所を間違えているのでしょうか? 
    一つできればループで同じように残りもできると考えているのですが

    キャンセル

  • 2018/06/28 15:38

    ありがとうございます。 実現したいことができました!

    図々しくて申し訳ないのですがにもう二つお聞きしたいです

    「1文字目が数字[0-9]なら~」の部分でIf buf Like "[0-9]*" Thenのどこのコードが「一文字目が」にあたるか分からなかったので宜しければ教えて頂きたいです
    下記のように先頭ではなく三文字まで空白の場合がありまして三文字めから読み込ませたいです。
    あと数字の後にアルファベットが付いた場合の対応はできないか教えて頂けないでしょうか

    {*/計算1*/
    123456f, /*計算
       12.3f, /*定数
       356751f, /*容量
       45321f, /*定数2

    キャンセル

  • 2018/06/28 17:23

    > どこのコードが「一文字目が」にあたるか分からなかったので宜しければ教えて頂きたいです

    Like にカーソルを置いてF1キーを押せばヘルプが表示されるのでそれで内容を理解してください。

    > 下記のように先頭ではなく三文字まで空白の場合が

    先頭の空白を除去する場合は、LTrim関数を使うといいですね。

    > あと数字の後にアルファベットが付いた場合の対応はできないか

    どのような対応をご希望でしょうか。。
    アルファベットも含めて出力したいということですか。
    アルファベットは f だけですか。それ以外のアルファベットもありますか。
    また、1文字だけですか。
    数値または数値+アルファベットの後には必ずカンマが付きますか。
    そのカンマの前を切り出せばいいのですか。

    どちらにしても、
    後から、ポロポロと例外データを出されると困ります。無駄ややり取りを何度も繰り返すことになりますので。

    まずは、すべてのデータを分析して、どのような基準で切り出せばいいのか、
    例外や矛盾がないように明確な仕様を決めてください。

    それができないとプログラミングはできません。

    キャンセル

  • 2018/06/28 17:36

    すいません。次からは気をつけます。

    本当に助かりましたありがとうございました。

    キャンセル

+1

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/28 14: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の部分で
    イ ンデックスが有効範囲にありませんとエラーになってしまいます
    間違いの指摘をお願いできないでしょうか

    キャンセル

  • 2018/06/28 14:31

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

    キャンセル

  • 2018/06/28 15:40

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

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • VBA

    1902questions

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

  • Excel

    1629questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

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