エクセル vbaについて質問です。
初めまして、今研修でシステムを作っているのですが困っております。ご教授頂けたらと思います。
内容は以下です。
csvファイルが用意してある。
csv中身「〇〇、タイプ(1.2.3)、△△、パターン種類(文字列)、◇◇、」
※パターン種類とタイプは紐づいてます。 パターンAだとタイプ1、Cだと3となっております。csvファイルを一行ずつエクセルで読み込む(タイプとパターン種類のみ)
パターン種類の列を主に重複データを検索、削除、削除した件数を種類ごとに合計して出力(そのパターンがタイプ2ならタイプ2の列に合計を出力)
読み込む際、別シートに元々登録してあるパターンと比較し、一致したら別シートパターンの右隣のセルのパターン説明文を代わりに読み込む。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
重複行の削除数含め件数を出力
重複行の削除数含め件数を出力なのであれば、CSVの行数と一緒になるのではと思うのですが、
読み込んだ際にカウントしてそれを出力してあげればいいのでは?
(もしや「4.読み込んだ行をNo1 2 3 4 5と最大行まで順番に番号を付けていく。」←これが通し番号のこと??)
csv読み込みの際の別シートと比較し、一致したら関連セル内容を代わりに出力
これは、こちらが使えそうです。
行番号が分かれば、列番号は固定なので、値はとれますよね。
あとは、出力先のシートの場所が分かれば。
あと、勉強中ということなので、、、
変数をまとめて記載しているのですが、ただ羅列しているだけだとどれがどれなのかが分かりにくいです。
Line Input #1, buf
がなぜ2行あるのか等、コメントをつけながらコードを書くと後で見直したときに分かりやすいかと思います。
[参考:コメントの書き方]
他にもやり方はいろいろあるんじゃないかと思います。
研修がんばってください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
ozwk
2016/05/23 11:30
入出力の例をください
takito
2016/05/23 11:57
何に困っているのでしょうか?
ozwk
2016/05/23 12:00
入力例のcsvください
shinjin
2016/05/23 12:00
重複行の削除数含め件数を出力
困っていることは
1.重複行の削除数含め件数を出力
2. csv読み込みの際の別シートと比較し、一致したら関連セル内容を代わりに出力
上記2点の実装ができなくて困っております・・・
shinjin
2016/05/23 12:08
入出力の例とcsvを追記致しました。