- ベストアンサー
EXCELで入力されているデータを表示させたい
EXCEL2003でシート1のA列1~10行にA~J、シート2のA列1~10行にC~Lと入力されています。シート3のA列1~12行にA~Lを表示させるのにはどのような関数を利用したら、もしくはVBAを組んだらよろしいのでしょうか。 過去に同様な質問があったかと思うのですが、探し出せませんでしたのでよろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
コントロールをおしながら複数選択したシートについて 各シートの A1セルに対して ctlr+sift+end で選択できる範囲を ※A列のデータが不足しているとずれる・・ 新しいシートに結合します。 マクロ> VisualBasicEditor起動 >挿入>標準モジュール ↓以下貼り付け ↓ Sub 選択シートのA1を基準に使用範囲を新しいシートへ結合コピー() Dim 置き場所 As Range If ActiveWindow.SelectedSheets.Count = 1 Then MsgBox "シートの複数選択は コントロールを押しながら選択" Exit Sub End If For Each 選択シート In ActiveWindow.SelectedSheets 選択シートリスト = 選択シートリスト + "/" + 選択シート.Name Next Sheets(1).Select Sheets.Add before:=Sheets(1) Set 置き場所 = Sheets(1).Range("A1") For Each 選択シート名 In Split(Mid(選択シートリスト, 2), "/") If 0 < Sheets(選択シート名).Range("A1").CurrentRegion.Count Then Sheets(選択シート名).Range("A1").CurrentRegion.Copy _ Destination:=置き場所 Set 置き場所 = Sheets(1).Range("A65536").End(xlUp).Offset(1) End If Next Sheets(1).Name = Mid(Replace(選択シートリスト, "/", "と"), 2) End Sub
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
例データ A2:B8 第1行目は行挿入して、特にC1は空白にします A列 B列 a d b c c f d h e k f g k とします。 (1)これをたとえばA列に1列に寄せ集めることが許されるケースなら、 =IF(COUNTA(A:A)<ROW()-1,INDIRECT("B"&ROW()-COUNTA(A:A)),A2) をどこかの列に複写するとA列のデータの後にB列のデータが続く。 その場合は初出だけに連続番号をふるのは、簡単で =IF(COUNTIF($A$2:$A$100,A2)=1,MAX($G1:G1)+1,"") を複写することにより出せる。 (2)1列化をやってはいけないケースなら 初出に連番を振るのは たとえばC2に=IF(COUNTIF($A$2:$A$8,A2)+COUNTIF($B$2:$B$5,A2)=1,MAX($C$1:C1)+1,"")と入れて複写する。 D2に=IF(COUNTIF($A$2:$A$8,B2)+COUNTIF($B$2:$B$8,B2)=1,MAX($D$1:D1)+1,"")を入れて複写する。 D1には=MAX(C:C)を入れておく(上の例の場合4) これで初出に連番が振れた。 (2)連番に基づき、別列にA列に寄せ集まったデータから寄せ集めるのは 私の回答で何度も書いている。今回略。 (3) 2列のままの場合は、2つに分かれて処理せざるを得ず、関数式が複雑になる。 そういうことで、関数では複雑になるので、VBAなどでやったほうがよいと思う。
- imogasi
- ベストアンサー率27% (4737/17069)
この質問で意味がわかるのでしょうか。 >シート1のA列1~10行にA~J、 1から10行までの各セルにAからjまでのどれか1文字が入っているのでしょうか。 複数の文字の連なりが1セルに入っているのですか。 >シート2のA列1~10行にC~Lと入力されています。 これも1から10行までの各セルに、Cからjまでのどれか1文字が入っているのでしょうか。Cからとなぜ前者と違うのでしょうか。 >シート3のA列1~12行にA~Lを表示させるのにはどのような Sheet1のA-Jを元にSheet2のC-Jと対応をとって、第3のデータ(質問になし)を引っ張ってくるのでしょうか。 本当に統合で解決する問題ですか。 答えておられる方がいらっしゃるので、私の頭が悪いのかな。
補足
説明不足ですみません m(_ _)m。 シート1のA1にA、A2にB・・A10にJ。 シート2のA1にC、A2にD・・A10にL。 というように入力されています。 シート1とシート2を比較するとC~Jはダブって入力されています。 このダブリを解消してシート3のA1にA、A2にB、A3にC、A4にD・・A10にJ、A11にK、A12にLと表示させたいと言うことです。 これで見てくれた方に理解していただけるとイイのですが・・・。 これでもイマイチでしたらまたご連絡をお願いいたします。 ちなみに(imogasi)さんの回答はいつも、それこそ参考にさせていただいています。「頭が悪い」と思っている人はなかなかいらっしゃらないと思いますヨ。
- Wendy02
- ベストアンサー率57% (3570/6232)
#1 のWendy02 です。 >参考とさせていただきます。 うーむ。「参考」とするということは、つまり期待していたものと違うということですか?どういうものをお望みなのかは分かりませんし、また、私は、関数でも分かりませんが、もしも、マクロでしたら、#1 を記録マクロにしてもマニュアルでも変わりようがないのです。それ以外のマクロでしたら、こんなふうなものもできます。 Sub myConsolidation() Dim i As Long, c As Range Dim myData As String, myArray As Variant For i = 1 To 2 With Worksheets("Sheet" & i) '最初のセルをA1とする。 For Each c In .Range("A1", .Range("A65536").End(xlUp)) If InStr(myData, "," & c.Value) = 0 Then myData = myData & "," & c.Value End If Next c End With Next i myArray = Split(Mid$(myData, 2), ",") Worksheets("Sheet3").Range("A1").Resize(UBound(myArray) + 1) = _ Application.Transpose(myArray)
お礼
度々のご回答ありがとうございます。 「参考とさせていただきます」はまだ回答が一つしかなかったので、まだ色々なやり方を回答してくれる方がいらっしゃるだろうと思って書きました。 私の知識不足で回答は、関数やVBAでの回答が来るだろうと思っていましたが、EXCELの機能で処理を行うと言う回答は想像していなかったのも事実ですネ。 こんなやり方もあるのかと感心しています。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 シート1か、シート2のどちらかのB列をひとつ使えませんでしょうか? どれかひとつのデータのあるA列の隣のB列のセルに、[0] とでも入れておきます。数字なら何でもよいです。 シート3をオープンして、A1にカーソルを合わせたら、 [データ]-[統合]で、[統合の設定] で [統合元範囲]を、Sheet1!$A$1:$B$10 →追加 Sheet2!$A$1:$B$10 →追加 で、 統合の基準を [左端列]にチェックを入れます。 そして、OKを押せば統合されます。 シート3のA列1~12行にA~Lと表示されます。 不必要な0は削除してかまいません。
お礼
早速のご回答ありがとうございます m(_ _)m。 「統合」の機能は使ったことがありませんでした。参考とさせていただきます。
お礼
お礼の連絡が遅れて申し訳ありませんでした。 いつもながら皆さんのご親切な回答には驚かされます。 動作の確認を楽しみに行なわさせていただきます。