A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3です。
まずはお礼の件について。
>質問した際に、VBの分類はないので、一旦VBAを選択しました。
カテゴリ的にはここで間違いないのですが、VBAも含んでVBとなってます。
質問される際にVB20××などと書いてあれば良かったかなと思います。
または『データはCSV』とあると、Excelのシートと勘違いは無かったかな?
取り敢えず区切り文字とエンコードが不明なのと検証用に作成したPathとファイル名については、適宜修正をお願いします。
結果は『出力画面』に出してます。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myDic As New SortedDictionary(Of String, Object())
'CSVファイルのあるフォルダ
Dim csvDir As String = "D:\"
'読込むCSVファイルの名前
Dim csvFileName1 As String = "abc.csv"
Dim csvRead As New FileIO.TextFieldParser(csvDir + csvFileName1, System.Text.Encoding.GetEncoding("Shift_JIS"))
csvRead.TextFieldType = FileIO.FieldType.Delimited
csvRead.Delimiters = New String() {","} '区切り文字はカンマ
Dim fields As Object() = csvRead.ReadFields()
Dim st As String
Console.WriteLine("{0} {1} {2}", fields(0), fields(1), fields(2))
While Not csvRead.EndOfData
fields = csvRead.ReadFields()
st = fields(0) + "_" + fields(1)
If Not myDic.ContainsKey(st) Then myDic.Add(st, New Object() {fields(0), fields(1), 0})
myDic(st)(2) = (Integer.Parse(myDic(st)(2)) + fields(2)).ToString
End While
csvRead.Close()
For Each item() As Object In myDic.Values
Console.WriteLine("{0} {1} {2}", item(0), item(1), item(2))
Next
End Sub
----出力結果----
ID 名前 価格
1 name1 30
2 name1 10
2 name2 32
3 name2 10
------------
キーの繋がりの関係で名前も並び変わってしまってます。
ごめんなさい。
No.3
- 回答日時:
No.2です。
【名前】の並べ替え必要なかったのですね。
ところでExcelであればVBAと提示された方が宜しいかと。
VBとは違いますので。
でもこれが実はVBで、CSV等からデータを集めるのであれば別ですが。
この回答へのお礼
お礼日時:2017/11/28 18:02
ご回答ありがとうございます。
実はVBで、CSVをアップロード時の処理です。
質問した際に、VBの分類はないので、一旦VBAを選択しました。
No.2
- 回答日時:
Excelなのか否かが不明ですが。
まずはExcelとして。
A~C列1行目からデータがあるとしてE~G列に纏めるのであれば、
Sub try()
Dim myDic As Object
Dim r As Range
Dim v, st As String
Set myDic = CreateObject("Scripting.Dictionary")
For Each r In Range("A2", Cells(Rows.Count, 1).End(xlUp))
st = r.Value & "_" & r.Range("B1").Value
If Not myDic.Exists(st) Then myDic.Add st, Array(r.Value, r.Range("B1").Value, 0)
v = myDic(st)
v(2) = v(2) + r.Range("C1").Value
myDic(st) = v
Next
Range("E1:G1").Value = Range("A1:C1").Value
Range("E2").Resize(myDic.Count, 3).Value = Application.Transpose(Application.Transpose(myDic.Items))
Columns("E:G").Sort Key1:=Range("E2"), Order1:=xlAscending, Key2:=Range("F2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
Set myDic = Nothing
End Sub
ご参考程度ですが。
No.1
- 回答日時:
こんにちは!
ExcelのVBAというコトで良いのでしょうか?
一例です。
元データはSheet1にあり、Sheet2に表示するとします。
尚、質問文通り1行目が項目行でデータは2行目以降にあるという前提です。
標準モジュールです。
Sub Sample1()
Dim myDic As Object
Dim myKey, myItem, myVal, myR, myAry
Dim i As Long, lastRow As Long, wS As Worksheet
Set myDic = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
wS.Range("A:C").ClearContents
With Worksheets("Sheet1")
wS.Range("A1:C1").Value = .Range("A1:C1").Value
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(2, "A"), .Cells(lastRow, "C"))
For i = 1 To UBound(myR, 1)
myVal = myR(i, 1) & "_" & myR(i, 2)
If Not myDic.exists(myVal) Then
myDic.Add myVal, myR(i, 3)
Else
myDic(myVal) = myDic(myVal) + myR(i, 3)
End If
Next i
myKey = myDic.keys
myItem = myDic.items
For i = 0 To UBound(myKey)
myAry = Split(myKey(i), "_")
wS.Cells(i + 2, "A") = myAry(0)
wS.Cells(i + 2, "B") = myAry(1)
wS.Cells(i + 2, "C") = myItem(i)
Next i
End With
wS.Range("A1").CurrentRegion.Sort key1:=wS.Range("A1"), order1:=xlAscending, Header:=xlYes
Set myDic = Nothing
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- 工学 ちなみになぜv=(v・e1)e1+(v・e2)e2はe1やe2が、正規直交基底でないと成り立たないと 2 2022/12/22 17:22
- 工学 以前、線形代数からフーリエ級数展開を導く上で 式v=(v, e1)e1+(v, e2)e2+…+(v 6 2022/06/29 17:24
- 物理学 波の合成についてです E1(z,t)=A0cos(kz-ωt+Φ) E2(z,t)=A0cos(kz 1 2022/10/10 06:35
- 数学 「(((a0)/2)・1, 1) …(a0)/2の1倍と1の内積 =(a0)(1, 1) …1 と1 5 2022/07/05 19:11
- 電気工事士 平均照度の計算あっているか教えてください。忙しいと思いますがよろしくお願いします。 現地測定し数値を 1 2022/09/29 07:37
- Excel(エクセル) 条件付き書式の色付きセルのカウント方法について 2 2022/10/21 14:51
- Excel(エクセル) 【EXCEL】空白でないセルの位置を検索したい 3 2022/04/26 22:03
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) 別のファイルへ条件を指定してセルの値を転記したい 4 2022/04/04 15:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
非同期のプロセス間通信(パイプ...
-
「Nullの使い方が不正です」の...
-
富士通(汎用機)のAIMについて
-
batでレジストリキーから読み取...
-
java / jsp selectedについて
-
エクセルのマクロ コンボボッ...
-
VBAコンボボックスの内容が反映...
-
VBAでアクセスDBからデータの取...
-
Excel VBAでグラフの可変データ...
-
C# DataTableに最後に追加した...
-
ActiveReportのdetailをデータ...
-
エクセルのCSV読み込みについて
-
ADODBでの行番号の取得、もしく...
-
【VB.NET】Excelの最終行までの...
-
事務処理ソフトの開発に使用す...
-
AccessVBAでのExcelメモリ解放
-
Excel VBAでグループ毎に集計す...
-
アクセスでウェブ上のデータを...
-
MSFlexGrid 行選択状態
-
[リボンのキーボード ショート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XMLでデータとして画像を指定す...
-
【C#】textBoxの指定行のデータ...
-
VBAでアクセスDBからデータの取...
-
Excel VBAでフォルダ内の全テキ...
-
【VB.NET】Excelの最終行までの...
-
C# DataTableに最後に追加した...
-
「Nullの使い方が不正です」の...
-
VBAコンボボックスの内容が反映...
-
COBOL数値転記の仕様
-
クリスタルレポートでレコード...
-
VB2010で、選択した系列を最前...
-
アクセスでウェブ上のデータを...
-
Excel VBAで1週間毎にカテゴリ...
-
非同期のプロセス間通信(パイプ...
-
エクセルのセル最終行取得
-
ActiveReportのdetailをデータ...
-
富士通(汎用機)のAIMについて
-
Excel VBAでグループ毎に集計す...
-
エクセルのCSV読み込みについて
-
AccessVBAでのExcelメモリ解放
おすすめ情報