- ベストアンサー
エクセルの列のデータの変更時に次の列に表示できるようにする方法
- エクセルの列のデータの変更時に、次の列に表示できるようにする方法について説明します。
- 例えば、A列には○○銀行や▽▽銀行のデータがあり、B列にはそれぞれの支店名が入っています。このとき、A列のデータが変更された場合に、自動的に次の列のデータも変更する方法を探しています。
- マクロや関数を使用して、エクセルの列のデータの変更時に次の列に表示できるようにする方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
sheet1に元データがあるとして sheet2へ出力します sheet1の元データはA列(銀行名)でソートしておくこと Sub test() Dim i As Long, j As Long Dim vDATA As Variant j = 1 With Worksheets("sheet1") vDATA = .Range("a1", .Cells(Rows.Count, 2).End(xlUp)) End With With Worksheets("sheet2") For i = 1 To UBound(vDATA) If i = 1 Then .Cells(1, 1).Value = vDATA(1, 1) .Cells(2, 1).Value = vDATA(1, 2) ElseIf .Cells(1, j).Value = vDATA(i, 1) Then .Cells(Rows.Count, j).End(xlUp).Offset(1).Value = vDATA(i, 2) Else j = j + 1 .Cells(1, j).Value = vDATA(i, 1) .Cells(2, j).Value = vDATA(i, 2) End If Next i End With End Sub 参考まで
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 参考になるかどうか判りませんが・・・ ↓の画像で説明させていただきます。 Sheet1のデータをSheet2に表示させています。 Sheet1に作業用の列を2列設けています。 作業列C2セルに =IF(COUNTIF($A$2:A2,A2)=1,ROW(A1)*1000+COLUMN(A1),"") という数式を入れ、列方向と行方向にオートフィルでずぃ~~~!っとコピーします。 そして、Sheet2のA2セルに =IF(ROUNDUP(COUNT(Sheet1!$C$2:$D$1000)/2,0)<ROW(A1),"",INDEX(Sheet1!$A$2:$B$1000,INT(SMALL(Sheet1!$C$2:$D$1000,ROW(A1))/1000),MOD(SMALL(Sheet1!$C$2:$D$1000,ROW(A1)),1000))) B2セルに =IF(ROUNDDOWN(COUNT(Sheet1!$C$2:$D$1000)/2,0)<ROW(A1),"",INDEX(Sheet1!$A$2:$B$1000,INT(SMALL(Sheet1!$C$2:$D$1000,ROW(A1)+COUNTIF($A$2:$A$1000,"?*"))/1000),MOD(SMALL(Sheet1!$C$2:$D$1000,ROW(A1)+COUNTIF($A$2:$A$1000,"?*")),1000))) という数式を入れA2・B2セルを範囲指定し、B2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 以上、参考になれば幸いですが 的外れなら読み流してくださいね。 ※ 余談になりますが、 実はこの数式の中で「数式は入っていて空白セルをカウントしない場合」の関数で悩んでいましたが、 他の回答の中の「KURUMITOさま」の回答が大変参考になりました。 数式の中にその回答方法も利用させていただいています。 私も他の方の回答を参考に色々勉強させてもらっています。 この場を借りてお礼申し上げます。 どうも失礼しました。m(__)m
お礼
おお!画像付きで、詳しくありがとうございます! 今は家ですので、職場で試させていただきたいと思います! 本当にみなさんがいろいろ意見いただけるので、私もいつも勉強しています^^ お礼が遅くなってもと思ったので、まだ実行していませんが書かせていただきました。 本当にありがとうございます!
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 Sheet1のデータをsheet2に並び替えします。 (1)sheet1のA列を選択→データ→フィルタ→フィルタオプションの設定→抽出先は選択範囲内を選択、重複するレコードは無視するを選択→OK (2)抽出されたA列のA2:Axx範囲をコピー→sheet2のA1を選択、右クリックで形式を選択して貼り付け→行列を入れ替えるを選択→OK (3)Sheet2のA2に=IF(COUNTIF(Sheet1!$A:$A,A$1)>=ROW(A1),INDEX(Sheet1!$B:$B,SMALL(IF(Sheet1!$A$1:$A$2000=A$1,ROW(Sheet1!$A$1:$A$2000),9999),ROW(A1))),"")を入力、入力完了時にshift+ctrl+enterキーを同時押下 (4)A2のセルを縦横に必要分コピー
お礼
書かれている通りに、操作してみたらできました!! やり方もいろいろあるんですね>< 自分の力の無さが…、とても勉強になりました! ありがとうございます!
Sheet1 A B 1 ○○銀行 ××支店 2 ○○銀行 △△支店 3 ○○銀行 □□支店 4 ▽▽銀行 ■■支店 5 ▽▽銀行 ●●支店 6 ◇◇銀行 ◆◆支店 7 ☆☆銀行 ▼▼支店 8 ☆☆銀行 ◎◎本店 9 ☆☆銀行 ▲▲支店 10 ☆☆銀行 ★★支店 Sheet2 A B C D 1 ○○銀行 ▽▽銀行 ◇◇銀行 ☆☆銀行 2 ××支店 ■■支店 ◆◆支店 ▼▼支店 3 △△支店 ●●支店 ◎◎本店 4 □□支店 ▲▲支店 5 ★★支店 Sheet2 において、 1.セル A2 に次の[条件付き書式]を設定 数式が =ISERROR(A2) フォント色 白 2.セル A2 に次の配列数式を入力して、此れを右方および下方にズズ ーッとドラッグ&ペースト {=INDEX(Sheet1!$B$1:$B$19,SMALL(IF((Sheet1!$A$1:$A$20=A$1)*(ROW(A$1:A$20)),(Sheet1!$A$1:$A$20=A$1)*(ROW(A$1:A$20)),""),ROW(A1)))}
お礼
ありがとうございます! この通りに張り付けてみたつもりですが、「#~」のエラーがでてしまいました。 私のやり方がうまくいかなかったのかもしれません。 こういうやり方もあることが知れました! 本当にありがとうございました。
お礼
ありがとうございます!! マクロを張り付けてみたら、まさにやりたいとおりにできました! 今回はこのマクロを使用することにしました。 もし今後に変更のあったときのために 今はこのマクロが何しているのか読んでいる最中です。 とても勉強になりました。ありがとうございます。 また何かわからないことがあれば力をお貸しくださるとうれしいです。