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

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

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

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

Q&A

解決済

1回答

3319閲覧

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

shinjin

総合スコア10

VBA

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

0グッド

0クリップ

投稿2016/05/23 01:55

編集2016/05/23 03:07

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

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

  1. csvファイルが用意してある。

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

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

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

  3. 読み込む際、別シートに元々登録してあるパターンと比較し、一致したら別シートパターンの右隣のセルのパターン説明文を代わりに読み込む。

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読み込みの際の別シートと比較し、一致したら関連セル内容を代わりに出力です。

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

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

イメージ説明

イメージ説明

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

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

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

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

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

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

ozwk

2016/05/23 02:30

入出力の例をください
takito

2016/05/23 02:57

何に困っているのでしょうか?
ozwk

2016/05/23 03:00

入力例のcsvください
shinjin

2016/05/23 03:00

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

2016/05/23 03:08

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

回答1

0

ベストアンサー

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

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

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

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

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

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

投稿2016/05/24 04:51

編集2016/05/24 04:52
kaputaros

総合スコア1844

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

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

shinjin

2016/05/24 05:49

わざわざご丁寧にどうもありがとうございました。 まず自分が分からない部分がよくわかってないという事で質問も非常に分かりにくい内容だったと思います。失礼いたしました。 csv読み込み方法とコメントの書き方は参考にさせて頂きます。 研修頑張ってくださいの一言を頂けて俄然やる気が出てまいりました! ありがとうございました。
kaputaros

2016/05/24 06:45 編集

リンク先はcsv読込み方法ではなく、検索の仕方ですよー。 わからない時のあるあるですね。 何が分からないのか、は一度どこが分かってどこが分からないのかを書き出してみると頭の整理がつきやすいですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問