以下の元データのようにA~D列にある情報を、
下方のE列、F列にあるように情報を合わせて表示したい場合、
E列、F列にはどのような関数を入れたらよいでしょうか。
COUNTIFやVLOOKUP関数を試してみましたが、
うまく順番に並べることができず途方に暮れています。。。
どなたかお知恵がある方、マクロではなく関数で
教えていただけたらありがたいです。
※A列はB列の情報番号、C列はD列の情報番号です。
↓元データ↓
A B C D
1 みかん 1 あ
1 みかん 2 い
1 みかん 3 う
2 りんご 4 え
2 りんご 5 お
3 すいか 6 か
3 すいか 7 き
3 すいか 8 く
3 すいか 9 け
↓このようにしたいです。↓
A B C D E F
1 みかん 1 あ 1 みかん
1 みかん 2 い 1 あ
1 みかん 3 う 2 い
2 りんご 4 え 3 う
2 りんご 5 お 2 りんご
3 すいか 6 か 4 え
3 すいか 7 き 5 お
3 すいか 8 く 3 すいか
3 すいか 9 け 6 か
7 き
8 く
9 け
何とぞよろしくお願いします。
No.4ベストアンサー
- 回答日時:
まず、処理を簡単にするために、1行目は項目名等を入力するために使用し、実際のデータは2行目(或いは更に下の行)から入力する様にして下さい。
その上で、E2セルには次の関数を入力して下さい。
=IF(ISNUMBER($E1),IF(COUNTIF($E$1:$E1,$E1)=COUNTIF($A:$A,$E1)+1,IF(COUNTIF($A:$A,">"&$E1),SMALL($A:$A,COUNTIF($A:$A,"<="&$E1)+1),""),$E1),IF(ROWS($2:2)=1,IF(COUNT($A:$A),MIN($A:$A),""),""))
次に、F2セルに次の関数を入力して下さい。
=IF($E2="","",IF(COUNTIF($E$1:$E1,$E2),INDEX($D:$D,MATCH($E2,$A:$A,0)+COUNTIF($E$1:$E1,$E2)-1),VLOOKUP($E2,$A:$B,2,FALSE)))
次に、E2~F2の範囲をコピーして、同じ列範囲の3行目以下に貼り付けて下さい。
これで、御希望の様に並べ替えられたデータがE列~F列に表示されます。
シンプルでわかりやすい回答をありがとうございました。
みなさまへ>>
面倒な質問にもかかわらず、丁寧にわかりやすく
教えてくださって心から感謝しています。
全てのやり方をやってみたうえで、最低な方法を
みつけることができ、おかげさまで、
何とか完成させることができました。
いろいろな発想があることがわかり、
視野が広がりました。楽しいですね。
今後は目的に応じて、教えていただいた
さまざまなやり方を使い分けて活用していきたいです。
今回は手数が少ない方法に感じたので、
ベストアンサーをNO.4にさせていただきました。
自分でゼロから組もうとすると複雑かもしれませんが、
引き続き勉強していきたいと思います。
本当に助かりました。ありがとうございました。
No.7
- 回答日時:
No.3 です。
補足します。実際には、私がご質問の処理を行うとしたら、No.6 さんのような感じの方法で行うと思います。つまり、お勧めです。
その方法をかいつまんで言えば、易しい数式、空白行の挿入・削除、ジャンプの機能を、併用するということです。全体の作業の時間としては、データ量が大量だったとしても、数分間で終わると思います。
質問文は数式による表示についてのお尋ねでしたし、正直、上の操作は説明の量が多くて大変なので、つい手抜いてしまいましたが…。すみません。
ということで No.3 は、自分で回答しておいてナンですが、こちらの勝手な判断ではベストアンサーと考えていません。なぜならマクロのコードを書くのにも、ちょっとは時間がかかりますから。難解な数式をセルに記入・構築して一発で表示させようとするよりは、まだマシですが。そういう方法もある、くらいに受け止めていただければと思います。
第 1(数式)、第 2(マクロ)、第 3(ジャンプほかの機能の併用)の方法が出ましたが、第 4 の方法としては、次のような、ピボットテーブルと VLOOKUP、OFFSET 関数の併用があると思います。これも No.6 さんの方法ほどには簡単ではありませんが、ご参考に。
(1)元データの 1 行目に項目名(番号1、果物、番号2、平仮名)の行を設置する。
(2)数式を使うなどして、元データの A 列の各値を 10^4 倍しておく。
(3)元データにピボットテーブルを適用し、別シートに表示。
(4)行ラベルのボックス内に「番号1」と「番号2」のフィールドをドラッグ。
ピボットテーブルレポートの表内に表示されている数値のセルを右クリック。
「フィールドの設定 > レイアウトと印刷タブ」にて「アウトライン形式」と「表形式」を選択できますが、「アウトライン形式」のまま、変更しない。
すると、ピボットテーブルレポートの表は既に、ご希望の配置になっています。
その表をコピーして、さらに別シートの A1 セルに貼り付け。
(5)元データのシート名が「Sheet1」であれば、3 枚目のシートに次式を記入。
3 枚目のシート
B2 =vlookup(a2,offset(sheet1!a:b,0,2*(a2<10^4)),2,)
C2 =a2/(1+9999*(a2>=10^4))
何度もご丁寧にありがとうございました。
図表の例示も番号を付けてくださり、
目で追いながら確認がしやすかったです。
見る側へのご配慮に感謝しています。
みなさまへ>>
面倒な質問にもかかわらず、丁寧にわかりやすく
教えてくださって心から感謝しています。
全てのやり方をやってみたうえで、最低な方法を
みつけることができ、おかげさまで、
何とか完成させることができました。
いろいろな発想があることがわかり、
視野が広がりました。楽しいですね。
今後は目的に応じて、教えていただいた
さまざまなやり方を使い分けて活用していきたいです。
今回は手数が少ない方法に感じたので、
ベストアンサーをNO.4にさせていただきました。
自分でゼロから組もうとすると複雑かもしれませんが、
引き続き勉強していきたいと思います。
本当に助かりました。ありがとうございました。
No.6
- 回答日時:
面倒を厭わなければ、以下のような方法もあります。
1.セル E1 に次式を入力して、此れを下方へズズーッと
ドラッグ&ペースト
=IF(COUNTIF(A$1:A1,A1)=1,0,"A")
2.列Eを選択 (⇒ Fig-1)
3.[編集]⇒[ジャンプ]⇒[セル選択]を実行
4.“数式”に目玉を入れて、“数値”以外のチェックを
外して[OK]をクリック (⇒ Fig-2)
5.[挿入]→[行]を実行 (⇒ Fig-3)
6.セル E1 に式 =IF($C1="",A2,C1) を入力して、此れを
右隣へドラッグ&ペースト
7.範囲 E1:F1 を下方へズズーッとドラッグ&ペーストし
た直後に(Fig-4 の状態で)[コピー]→[値の貼り付け]を実行
8.列A~Dを選択
9.ステップ3を実行
10.“空白セル”のみに目玉を入れて、[OK]をクリック
11.[編集]→[削除]から“上方向にシフト”目玉を入れて、
[OK]をクリック
ユニークなアイデアをいただきありがとうございました。
作表のみの場合などで活用できそうです。
みなさまへ>>
面倒な質問にもかかわらず、丁寧にわかりやすく
教えてくださって心から感謝しています。
全てのやり方をやってみたうえで、最低な方法を
みつけることができ、おかげさまで、
何とか完成させることができました。
いろいろな発想があることがわかり、
視野が広がりました。楽しいですね。
今後は目的に応じて、教えていただいた
さまざまなやり方を使い分けて活用していきたいです。
今回は手数が少ない方法に感じたので、
ベストアンサーをNO.4にさせていただきました。
自分でゼロから組もうとすると複雑かもしれませんが、
引き続き勉強していきたいと思います。
本当に助かりました。ありがとうございました。
No.5
- 回答日時:
追記です。
その後A列で並べ替えして、EF列にコピーしてください。
追記の書き込みありがとうございました。
みなさまへ>>
面倒な質問にもかかわらず、丁寧にわかりやすく
教えてくださって心から感謝しています。
全てのやり方をやってみたうえで、最低な方法を
みつけることができ、おかげさまで、
何とか完成させることができました。
いろいろな発想があることがわかり、
視野が広がりました。楽しいですね。
今後は目的に応じて、教えていただいた
さまざまなやり方を使い分けて活用していきたいです。
今回は手数が少ない方法に感じたので、
ベストアンサーをNO.4にさせていただきました。
自分でゼロから組もうとすると複雑かもしれませんが、
引き続き勉強していきたいと思います。
本当に助かりました。ありがとうございました。
No.3
- 回答日時:
数式をセルに記入することで達成したいとのご希望ですが、こういった複雑な並べ替えをしようとすると難解な数式となるので、実用性が低く、全くお勧めではない方法です。
一応、次式により、できないことはありません。
E1 =a1
E2 =index($A:$D,$G2+($G1=$G2),columns($E2:e2)+2*(1-($G1=$G2)))
G1 =max(index((row(G$1:g1)+A$1:a1+(A$1:a1=0)*max(a:a)<=row(g1))*row(G$1:g1),))
※
E2 セルをコピーして E2:E12 のセル範囲に貼り付け。次いで、E1:E12 をコピーして F1:F12 に貼り付け。
マクロを使えば、苦しんで数式を編み出さなくても、遥かに簡単にできます。次のコードを標準モジュールに貼って実行してください。
Sub ArrangeWithSubtitles()
Dim i As Long
Range("a1:b1").Copy Destination:=Range("e1")
Range("c1:d1").Copy Destination:=Range("e2")
For i = 2 To Cells(Rows.Count, "a").End(xlUp).Row
If Cells(i - 1, "a").Value <> Cells(i, "a").Value Then
With Cells(Rows.Count, "e").End(xlUp)
.Offset(1, 0).Value = Cells(i, "a").Value
.Offset(1, 1).Value = Cells(i, "b").Value
End With
End If
With Cells(Rows.Count, "e").End(xlUp)
.Offset(1, 0).Value = Cells(i, "c").Value
.Offset(1, 1).Value = Cells(i, "d").Value
End With
Next i
End Sub
ご提案ありがとうございます。
マクロは現在勉強中ですが、なかなか理解が追い付いていません。
ご教示いただいたコードも今度練習でやってみたいと思います。
No.2
- 回答日時:
》 2列の情報を1列に順番に並べたい
とのことだけど、
「2列」とは、「元データ」の何処と何処の列を指しているの?
「1列」とは、「このようにしたい」表の何処の列のこと?
この回答への補足
早速のご回答ありがとうございます。
説明不足ですみませんでした。以下のように考えて書いていました。
>「2列」とは、「元データ」の何処と何処の列を指しているの?
⇒たとえば、A列とB列を▲、C列とD列を■のかたまりとしたとき、
▲と■のことを指して「2列」と表現してしまいました。
“2列”を“2情報”と書くべきでした。
>「1列」とは、「このようにしたい」表の何処の列のこと?
⇒同様の考え方で、たとえば、E列とF列を●としたとき、
●を指して「1列」と書いてしまいました。
つまり、
A列+C列 →E列
B列+D列 →F列
ということが言いたかったのです。
貴重なお時間のお手を煩わせてしまい、申し訳ありませんでした。
引き続きご回答いただけるようでしたら是非お待ちしたいと思います。
なにとぞよろしくお願いいたします。
No.1
- 回答日時:
AB列のデータの重複行を削除し、以下のように、A列を10倍、C列を10倍+1、のようにしてから、CD列のデータをAB列の下に入れ、A列優先でABデータを並べ替えてはいかがでしょう。
A B C D
10 みかん 11 あ
20 りんご 21 い
30 すいか 31 う
41 え
51 お
61 か
71 き
81 く
91 け
重複行の削除は、
[データ] メニューの [フィルタ] の[フィルタ の詳細設定] で、[重複するレコードは無視する] のチェック ボックスをオンにし、[OK] をクリックします。
フィルタ後のリストが表示され、重複する行が非表示になります。
このデータをコピーして貼り付けます。
この回答への補足
早速ご回答いただきありがとうございました。
教えていただいた通りにやってみましたところ、
以下のようになってしまいました。
何かやり方が違っているのでしょうか・・・。
10みかん
11あ
20りんご
21い
30すいか
31う
41え
51お
61か
71き
81く
91け
↓こんなふうにしたいのです。。。↓
10みかん
11あ
12い
13う
20りんご
24え
25お
30すいか
36か
37き
38く
39け
説明がうまくできず、わかりづらくてすみません。
何度もすみませんが、引き続きご回答いただけると嬉しいです。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの質問です。 F列からL...
-
作成した数式を値として表示し...
-
エクセルの文字が途中から消える
-
条件付き書式設定で罫線を引き...
-
Excel関数について教えてくださ...
-
Excelの警告について
-
Excel関数について教えてくださ...
-
ワークシートに出現したこの画...
-
エクセルのセル内に分数などの...
-
タイムスタンプとテキストから...
-
EXCELの散布図で日付が1900年に...
-
エクセルでファイルの最終更新...
-
シートの情報を別のシートへま...
-
マクロの処理が遅くなった
-
エクセルの数式バーのフォント...
-
エクセルの「条件付き書式」を...
-
エクセル日付 文字列の関数がエ...
-
Excelでの文字色
-
Excelの数字の前に入っている空...
-
Excelについて教えてください。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報