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

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

ただいまの
回答率

90.48%

  • VBA

    1863questions

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

エクセルcsvファイル取り込みとその他機能について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,011

shinjin

score 2

エクセル vbaについて質問です。

初めまして、今研修でシステムを作っているのですが困っております。ご教授頂けたらと思います。
内容は以下です。

  1. csvファイルが用意してある。
    csv中身「〇〇、タイプ(1.2.3)、△△、パターン種類(文字列)、◇◇、」 
    ※パターン種類とタイプは紐づいてます。 パターンAだとタイプ1、Cだと3となっております。

  2. csvファイルを一行ずつエクセルで読み込む(タイプとパターン種類のみ)

  3. パターン種類の列を主に重複データを検索、削除、削除した件数を種類ごとに合計して出力(そのパターンがタイプ2ならタイプ2の列に合計を出力)

  4. 読み込む際、別シートに元々登録してあるパターンと比較し、一致したら別シートパターンの右隣のセルのパターン説明文を代わりに読み込む。
    4.読み込んだ行をNo1 2 3 4 5と最大行まで順番に番号を付けていく。

該当のソースコード

Sub 練習1()
    Dim buf As String
    Dim tmp As Variant
    Dim n As Long
    Dim num As Long
    Dim row_end As Long
    Dim msg As String
    Dim i As Long
    Dim iti As Long
    Dim ni As Long
    Dim san As Long
    Dim mix As String
    Dim FoundCell As Range
    Dim i As Long, cnt As Long

    Open "csv置き場所" For Input As #1
    n = 8
    num = 0
    iti = 0
    ni = 0
    san = 0
           Line Input #1, buf

        Do Until EOF(1)
            Line Input #1, buf
            tmp = Split(buf, ",")
            n = n + 1

            mix = tmp(1)

           Worksheets("IDSテスト").Select
            Cells(n, 2).Value = tmp(6)

            If mix = "1" Then
                iti = iti + 1
                Worksheets("IDSテスト").Select
                Cells(n, 3).Value = iti

             ElseIf mix = "2" Then
                ni = ni + 1
                Worksheets("IDSテスト").Select
                Cells(n, 4).Value = ni

            Else
                san = san + 1
                Worksheets("IDSテスト").Select
                Cells(n, 5).Value = san

                End If
             num = num + 1
            Cells(n, 1).Value = num

           Worksheets("IDSテスト").Range("A9:B2000").RemoveDuplicates Columns:=2, Header:=xlYes  '重複行削除

            Range(Range("B9"), Cells.SpecialCells(xlCellTypeLastCell)).SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp  '空白行削除

        Loop
    Close #1

End Sub

試したこと

csvファイルを一行ずつ読み込むこと
重複行の削除
空白行の削除までは行いました。

後は、重複行の削除数含め件数を出力
csv読み込みの際の別シートと比較し、一致したら関連セル内容を代わりに出力です。

以上、わかりにくくて申し訳ありませんがよろしくお願いいたします。

※入出力の例として画像を添付いたします。

![イメージ説明](594f8b7ef48c66673f2ae69e71a14d9e.jpeg)

イメージ説明

※入力例のcsvは
販売日,タイプ,パターン,屋さん
2016-05-23,A,みかん,八百屋
2016-05-22,B,ぶどう,八百屋
2016-05-22,C,りんご,八百屋
取り込む列は「タイプ」と「パターン」です。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • ozwk

    2016/05/23 12:00

    入力例のcsvください

    キャンセル

  • shinjin

    2016/05/23 12:00

    重複行の削除数含め件数を出力 困っていることは 1.重複行の削除数含め件数を出力 2. csv読み込みの際の別シートと比較し、一致したら関連セル内容を代わりに出力 上記2点の実装ができなくて困っております・・・

    キャンセル

  • shinjin

    2016/05/23 12:08

    入出力の例とcsvを追記致しました。

    キャンセル

回答 1

checkベストアンサー

0

重複行の削除数含め件数を出力 

重複行の削除数含め件数を出力なのであれば、CSVの行数と一緒になるのではと思うのですが、
読み込んだ際にカウントしてそれを出力してあげればいいのでは?
(もしや「4.読み込んだ行をNo1 2 3 4 5と最大行まで順番に番号を付けていく。」←これが通し番号のこと??)

csv読み込みの際の別シートと比較し、一致したら関連セル内容を代わりに出力

これは、こちらが使えそうです。
行番号が分かれば、列番号は固定なので、値はとれますよね。
あとは、出力先のシートの場所が分かれば。

あと、勉強中ということなので、、、
変数をまとめて記載しているのですが、ただ羅列しているだけだとどれがどれなのかが分かりにくいです。
Line Input #1, bufがなぜ2行あるのか等、コメントをつけながらコードを書くと後で見直したときに分かりやすいかと思います。
[参考:コメントの書き方]

他にもやり方はいろいろあるんじゃないかと思います。
研修がんばってください。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/05/24 14:49

    わざわざご丁寧にどうもありがとうございました。
    まず自分が分からない部分がよくわかってないという事で質問も非常に分かりにくい内容だったと思います。失礼いたしました。

    csv読み込み方法とコメントの書き方は参考にさせて頂きます。
    研修頑張ってくださいの一言を頂けて俄然やる気が出てまいりました!
    ありがとうございました。

    キャンセル

  • 2016/05/24 15:43 編集

    リンク先はcsv読込み方法ではなく、検索の仕方ですよー。

    わからない時のあるあるですね。
    何が分からないのか、は一度どこが分かってどこが分からないのかを書き出してみると頭の整理がつきやすいですよ。

    キャンセル

関連した質問

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

  • VBA

    1863questions

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