教えて!gooにおける不適切な投稿への対応について

Sub TEST24()
Dim myDic As Object
Dim r As Range
Dim i As Long, key

Set myDic = CreateObject("Scripting.Dictionary")

Range("F:I").EntireColumn.ClearContents

For Each r In Range("C2", Cells(Rows.Count, "C").End(xlUp))
If Not myDic.Exists(r.Value) Then _
myDic.Add r.Value, CreateObject("System.Collections.ArrayList")

myDic(r.Value).Add (r.Value)
Next

i = 0

For Each key In myDic.Keys

Range("E1").Offset(, i).Resize(myDic(key).Count).Value = WorksheetFunction.Transpose(myDic(key).ToArray())
i = i + 2

Next

Set myDic = Nothing

End Sub

C列と同時にB列も移動できないでしょうか。
下のようなイメージです
わかる方教えてください
おねがいします。

「初心者です。」の質問画像
gooドクター

A 回答 (4件)

参考回答は既出ですがコードを弄るなら、



Sub TEST24_2()
Dim myDic As Object
Dim r As Range
Dim i As Long, key

Set myDic = CreateObject("Scripting.Dictionary")

Range("E:O").EntireColumn.ClearContents '書き込むセル範囲をクリアについて修正

For Each r In Range("C2", Cells(Rows.Count, "C").End(xlUp))
If Not myDic.Exists(r.Value) Then _
myDic.Add r.Value, CreateObject("System.Collections.ArrayList")

myDic(r.Value).Add (Array(r.Offset(, -1).Value, r.Value)) '追加するデータを配列に変更
Next

i = 0

For Each key In myDic.Keys

'配列としてデータを追加したのでResizeと行列の反転回数を変更
Range("E2").Offset(, i).Resize(myDic(key).Count, 2).Value = _
WorksheetFunction.Transpose(WorksheetFunction.Transpose(myDic(key).ToArray()))
i = i + 3 'データを書き込むステップを修正

Next

Set myDic = Nothing

End Sub

初級レベルなジジィはこれ位しかできませぬ。
あ”、罫線については・・・・?
    • good
    • 1
この回答へのお礼

ありがとう

参考にさせていただきます!

お礼日時:2021/02/01 14:59

ExcelらしくやるならC列を基準にB・C列を並び替え、上から順にC列を調べていって次の行の値が変わったらそれまでの範囲をコピペすれば宜しいかもですよ。




PS.
fujillin様
4.8のみですとダメなのですね。
勉強になりました。
なんせジジィなので古いのを使っているため・・・・(悲)
    • good
    • 1

こんにちは



私の環境では .Net Framework 4.8しか入っていないので、ArrayListが使えないため、コードを見ただけでの回答ですので、外していたら失礼。
(3.5でないとarrayListが使えないらしい…)


ご提示のコードでは、key:value に両方とも同じ値(C列の値)を設定しているようですが、keyはみな同じなので、value(=ArrayList)にはB列の値を入れてゆくようにすれば、ご質問の内容を実現できるのではないでしょうか。
そのかわりに、添付図のF列に同じkeyの値を埋める処理を追加する必要がありますが、
 Range.Resize(myDic(key).Count).Value = key
といった感じの1行ですむと思いますので。
    • good
    • 1
この回答へのお礼

参考にさせていただきます!
ありがとうございます。

お礼日時:2021/02/01 15:04

応用が無理であるなら最初から目的を明確に質問すべきでは?


てっきり質問は他のサイトで解決し放置されたのかと思いました

ちなみにC列の抜き出される順番は順不同で良いのですかね?
あともしこれが課題であるなら、この回答を提出したとしてもコードの書き方は特殊(VBAではないとも言える)なので解説を問われてもその場で答えられるのか?と、疑問はあります
    • good
    • 0
この回答へのお礼

教えてくださったのに反応もせず、すみませんでした
他のサイトを調べたりしているのですが、中々にわからず半場やけくそになってます。
解説をするつもりがなかったので、確かに答えられないですね、
他の方法を自分で調べて理解して課題として出そうと思います。

お礼日時:2021/02/01 14:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング