色々と調べましたが解決できません。
以下のデータの空白行が複数列(3列ずつ)ごとに
いずれかの列にバラバラに入っていて、
それをA列にランダムの件数で入っている項目ごとに詰めたいです。
空白セルには関数が入っているため、ジャンプ機能の空白セルには該当しません。
大量にあるので関数で効率よく整えたいです。
どなたかよろしくお願いいたします。
【データ】
A B C D E F G H I J
1 佐藤 ● 〇 ◎ 空 空 空 空 空 空
2 佐藤 空 空 空 ■ ◇ □ 空 空 空
3 佐藤 空 空 空 空 空 空 △ ▽ ▲
4 佐藤 ● 〇 ◎ 空 空 空 空 空 空
5 鈴木 空 空 空 ■ ◇ □ 空 空 空
5 高橋 空 空 空 空 空 空 △ ▽ ▲
6 田中 ● 〇 ◎ 空 空 空 空 空 空
7 田中 ● 〇 ◎ 空 空 空 空 空 空
8 田中 空 空 空 空 空 空 △ ▽ ▲
9 田中 ● 〇 ◎ 空 空 空 空 空 空
【完成形】
A B C D E F G H I J
1 佐藤 ● 〇 ◎ ■ ◇ □ △ ▽ ▲
2 佐藤 ● 〇 ◎ 空 空 空 空 空 空
3 鈴木 空 空 空 ■ ◇ □ 空 空 空
4 高橋 空 空 空 空 空 空 △ ▽ ▲
5 田中 ● 〇 ◎ 空 空 空 △ ▽ ▲
6 田中 ● 〇 ◎ 空 空 空 空 空 空
7 田中 ● 〇 ◎ 空 空 空 空 空 空
No.5ベストアンサー
- 回答日時:
#3です
ロジック自体考え直したくなりました。が、6万件以上なら配列を使った方が良さそうかも、、取敢えずパターンテストと言う事で現行の手直しです
Sub sample1()
Dim c As Range
Dim n1 As Long: n1 = 1
Dim n2 As Long: n2 = 1
Dim n3 As Long: n3 = 1
Dim deCol As Integer: deCol = 10
Dim tCol As Integer
Dim SH1 As Worksheet
Dim SH2 As Worksheet
Set SH1 = ActiveSheet '元シート
Set SH2 = Worksheets(ActiveSheet.Name) '出力シート
With SH2
For Each c In SH1.Range("A1", SH1.Cells(Rows.Count, "A").End(xlUp))
Select Case c.Offset(, 1)
Case "●"
tCol = 2 + deCol
If .Cells(n1, tCol).Value <> "" Then n1 = nRow(.Cells(n1, tCol), n1)
.Cells(n1, tCol).Resize(1, 3).Value = c.Offset(, 1).Resize(1, 3).Value
Case "■"
tCol = 5 + deCol
If .Cells(n2, tCol).Value <> "" Then n2 = nRow(.Cells(n2, tCol), n2)
.Cells(n2, tCol).Resize(1, 3).Value = c.Offset(, 1).Resize(1, 3).Value
Case "△"
tCol = 8 + deCol
If .Cells(n3, tCol).Value <> "" Then n3 = nRow(.Cells(n3, tCol), n3)
.Cells(n3, tCol).Resize(1, 3).Value = c.Offset(, 1).Resize(1, 3).Value
End Select
If Application.CountIf(.Range(.Cells(n1, 2 + deCol), .Cells(n1, 10 + deCol)), "<>") >= 9 Then n1 = n1 + 1
.Cells(Application.Max(n1, n2, n3), deCol + 1).Value = c.Value
If c <> c.Offset(1) Then
n1 = Application.Max(n1, n2, n3) + 1
n2 = n1: n3 = n1
End If
Next
End With
' Range(Cells(n, "A"), Cells(Cells(Rows.Count, "A").End(xlUp).Row, "J")).ClearContents
End Sub
Public Function nRow(myCel As Range, n As Long) As Long
Dim i As Integer: i = 0
Do While myCel.Offset(i).Value <> ""
i = i + 1
Loop
nRow = n + i
End Function
No.4
- 回答日時:
[No.1お礼]へのコメント
》 手動で一個ずつコピペするしかないですかね
私の構想(添付図参照、一旦「項目」ごとに別場所に敢えてエラー付きで抽出⇒全データの値化⇒Alt+HFDGでエラー値の削除⇒上方へシフト)とは異なるけど、手間は似たようなものかも。
数式だけじゃ無理と諦めて、
を聴き始めました。
なるほど!そういう方法もあるのですね。
ご丁寧にありがとうございます。
今回は「項目」が6万件以上あるので、君待てどもを聴こうと思います笑
件数が少ないときに試してみます、ありがとうございました(^^)
No.3
- 回答日時:
こんにちは
処理の内容についてですが、表組のB列の値がシンボルとなり
B列C列D列の同じ行を1つの塊として処理しています。
>【9列ずつ】となります
Resize(1, 9).Valueで良いと思います
シンボルが増える場合は示されている通りCaseを増やし
出力セルを指定すれば良いです
検証する環境が無いので確かではないのですが
変数n?はグループの対象行なので出力するカラムが3か所なら
示されているコードで良いように思います。
理解されているように思いますので、試してみてはいかがでしょう。
試す環境は、コピーブックを作り任意の名前の新規シートを作って
コードのSet SH2 = Worksheets(ActiveSheet.Name) '出力シート
のActiveSheet.Nameを "任意のシート名" として
データのあるシートを表示してAlt+F8でダイアログから
プロシージャを実行して検証してください。
このロジックの場合
5 田中 ● 〇 ◎ 空 空 空 △ ▽ ▲
6 田中 ● 〇 ◎ 空 空 空 空 空 空
7 田中 ● 〇 ◎ 空 空 空 空 空 空
の結果に対応するため
もし、6か所の列が出力対象になる場合は、変数n?対応部分の全てを増やす必要があります
変数nを1つで対応すると
5 田中 ● 〇 ◎ 空 空 空 空 空 空
6 田中 ● 〇 ◎ 空 空 空 △ ▽ ▲
7 田中 ● 〇 ◎ 空 空 空 空 空 空
のような結果になります。(例のデータで)
ご確認ありがとうございます。
実際に試してみたところ、かなり近い形になってきました。
VBAってすごいですね。。('Д')
ところで、以下のようになってしまったのですが、
どこをどのようなコードに修正したらいいでしょうか。
何度もすみません、よろしくお願いいたします。
【元データ】
A B C D
10 伊藤 ● 〇 ◎
11 伊藤 ● 〇 ◎
12 伊藤 ■ ◇ □
13 伊藤 ■ ◇ □
13 伊藤 ■ ◇ □
13 伊藤 △ ▽ ▲
14 渡辺 ● 〇 ◎
【VBA】
A B C D E F G H I J
10 伊藤 ● 〇 ◎ ■ ◇ □ △ ▽ ▲
11 伊藤 ● 〇 ◎ ■ ◇ □ 空 空 空
12 渡辺 ● 〇 ◎ ■ ◇ □ 空 空 空
※【■グループ】について本来は「伊藤」のデータが渡辺にずれ込んでしまっている
【理想の完成形】
A B C D E F G H I J
10 伊藤 ● 〇 ◎ ■ ◇ □ △ ▽ ▲
11 伊藤 ● 〇 ◎ ■ ◇ □ 空 空 空
12 伊藤 空 空 空 ■ ◇ □ 空 空 空
13 渡辺 ● 〇 ◎ 空 空 空 空 空 空
No.2
- 回答日時:
こんにちは、
お呼びでない事は理解しておりますが
VBAで処理する方法です。(補足の【元データ】の場合)
標準モジュールに
Sub sample1()
Dim c As Range
Dim n1 As Long: n1 = 1
Dim n2 As Long: n2 = 1
Dim n3 As Long: n3 = 1
Dim deCol As Integer: deCol = 10
Dim tCol As Integer
Dim SH1 As Worksheet
Dim SH2 As Worksheet
Set SH1 = ActiveSheet '元シート
Set SH2 = Worksheets(ActiveSheet.Name) '出力シート
With SH2
For Each c In SH1.Range("A1", SH1.Cells(Rows.Count, "A").End(xlUp))
Select Case c.Offset(, 1)
Case "●"
tCol = 2 + deCol
If .Cells(n1, tCol).Value <> "" Then n1 = n1 + 1
.Cells(n1, tCol).Resize(1, 3).Value = c.Offset(, 1).Resize(1, 3).Value
Case "■"
tCol = 5 + deCol
If .Cells(n2, tCol).Value <> "" Then n2 = n2 + 1
.Cells(n2, tCol).Resize(1, 3).Value = c.Offset(, 1).Resize(1, 3).Value
Case "△"
tCol = 8 + deCol
If .Cells(n3, tCol).Value <> "" Then n3 = n3 + 1
.Cells(n3, tCol).Resize(1, 3).Value = c.Offset(, 1).Resize(1, 3).Value
End Select
If Application.CountIf(.Range(.Cells(n1, 2 + deCol), .Cells(n1, 10 + deCol)), "<>") >= 9 Then n1 = n1 + 1
.Cells(n1, deCol + 1).Value = c.Value
If c <> c.Offset(1) Then
n1 = n1 + 1: n2 = n1: n3 = n1
End If
Next
End With
' Range(Cells(n, "A"), Cells(Cells(Rows.Count, "A").End(xlUp).Row, "J")).ClearContents
End Sub
念のため K列より出力しています。
A1セルより出力したい場合は、deCol = 10 を deCol = 0 として
最後の行の ' Range(・・・ の 'を削除してください。
(元データは消えてしまいますので注意)
別シートに書き出す場合は、書き出しシートを別シートにしてください
例 実際にあるシート名を設定
Set SH2 = Worksheets("完成形") '出力シート
別シートの場合、最後の行の ' Range(・・・ の 'を削除は不要です
(コード自体不要)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) Excelについて質問です(ver2019) 1 2023/06/30 21:20
- Excel(エクセル) データ入力規則リスト 空白を無視 3 2022/07/13 15:11
- Excel(エクセル) エクセル 3つの値の中からデータを抽出させる方法 4 2023/08/24 11:00
- 物理学 光(光速)と電流(電子の移動日)の速度は同じと書いてあったのですが本当でしょうか? 個人的には光速の 11 2022/04/11 04:59
- その他(趣味・アウトドア・車) 全日空で羽田空港から新千歳空港、新千歳空港から羽田空港と乗ります。 東京都心の景色が見れるのは座席右 2 2023/03/24 20:51
- 飛行機・空港 ハブ空港は対馬上県あたりでも良いですね? 9 2023/07/17 11:59
- 飛行機・空港 飛行機の乗り継ぎについて 8 2022/09/01 16:53
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- 飛行機・空港 今からデルタ航空で羽田空港→アトランタ空港→ルイビル国際空港の順に行くのですが、アトランタ空港の乗り 2 2023/08/17 17:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「空が飛べる」や「空が飛びた...
-
理科天文の問題です。 ③ 会話文...
-
⋆寒冷前線が通過した時 ⋆寒冷前...
-
互換空亡について。 彼の空亡の...
-
地球の凹凸について
-
地球誕生は今から約46億年前で...
-
恐竜は、地球への大きな隕石の...
-
ballとsphereの違い
-
地球が地軸を傾けずに公転した...
-
「星の王子さま」はどうして蛇...
-
宇宙空間で飛び出したら永遠に...
-
アノマロカリスはなぜ滅んだ?
-
赤道半径と極半径のちがいについて
-
ヘリコプターで宙に浮いてても...
-
広島大学地球惑星環境システム...
-
偏平率
-
何処かに行ってみたい場所はあ...
-
仮に、液体の水を持っている浮...
-
海水の屈折率
-
みじかな科学の不確実性につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
夕焼け空に緑色が混ざってるん...
-
北海道の空が近く感じるのはな...
-
互換空亡について。 彼の空亡の...
-
天と空の違いはなんですか?
-
曇りの日の夕時、空がオレンジ...
-
「空が飛べる」や「空が飛びた...
-
天国と地獄、上下関係、上品、...
-
子供にも分かるように海の色の...
-
Excelで項目ごとに空白セルを詰...
-
光電子倍増管
-
夕暮れ時の空
-
天国は本当に空の上にあるの?
-
宇宙から見た地球の青
-
フリートーク この空を見て一言...
-
⋆寒冷前線が通過した時 ⋆寒冷前...
-
2022年5月9日(月)中国の...
-
USBメモリーの中身が消せません
-
月面上での空はなぜ黒いのか?
-
ダークマターって大笑いですよね
-
地球の地軸は23.4°傾いていて両...
おすすめ情報
ちなみに元データからデータにIF関数で複数列に分類してます。
元データ→完成形にしたいです。
【元データ】
A B C D
1 佐藤 ● 〇 ◎
2 佐藤 ■ ◇ □
3 佐藤 △ ▽ ▲
4 佐藤 ● 〇 ◎
5 鈴木 ■ ◇ □
5 高橋 △ ▽ ▲
6 田中 ● 〇 ◎
7 田中 ● 〇 ◎
8 田中 △ ▽ ▲
9 田中 ● 〇 ◎
【完成形】
│●グループ│■グループ│△グループ
A B C D E F G H I J
1 佐藤 ● 〇 ◎ ■ ◇ □ △ ▽ ▲
2 佐藤 ● 〇 ◎ 空 空 空 空 空 空
3 鈴木 空 空 空 ■ ◇ □ 空 空 空
4 高橋 空 空 空 空 空 空 △ ▽ ▲
5 田中 ● 〇 ◎ 空 空 空 △ ▽ ▲
6 田中 ● 〇 ◎ 空 空 空 空 空 空
7 田中 ● 〇 ◎ 空 空 空 空 空 空
回答いただきありがとうございます。
実はデータ数はもっと多くて、簡略化したものを質問させていただいていました。
VBAは使ったことがなくて、自身で応用できず、補足と質問をさせて頂けますと幸いです。
【元データ】について
①「●グループ│■グループ│△グループ」
と表記しましたが、複数の種類の関連するデータを
それぞれのグループに振り分けています。
●:B列セルに「松」「竹」「梅」と入っている
■:「いろは」
△:「犬」「猫」
この場合『Case "●"~~Value』のコードを増やしたのですが、合ってますか?
②「以下のデータの空白行が複数列(3列ずつ)ごとに」
と表記しましたが、実際は【9列ずつ】となります。
この場合『tCol = 2 + deCol』と『Resize(1, 3)』の数字を増やしたのですが、合ってますか?
実際に記載したコードを記載するので見ていただきたいです。
【同じなので省略】
Case "松"
tCol = 2 + deCol【省略】.Cells(n1, tCol).Resize(1, 9).Value = c.Offset(, 1).Resize(1, 9).Value
Case "竹"
tCol = 2 + deCol【省略】.Cells(n1,【省略】
Case "梅"
tCol = 2 + deCol【省略】.Cells(n1, 【省略】
Case "いろは"
tCol = 11 + deCol【省略】.Cells(n2,【省略】
Case "犬"
tCol = 20 + deCol【省略】.Cells(n3, 【省略】
Case "猫"
tCol = 20 + deCol【省略】.Cells(n3,【省略】
.Cells(n1, 29 + deCol)), "<>") >= 28 Then n1 = n1 + 1
【省略】