- ベストアンサー
エクセルのシート間で文字や数値を飛ばす方法
- エクセルのシート1にある文字や数値をシート2の指定した場所へ飛ばすことが可能です。
- 具体的には、シート1のリストに数値を入れると、シート2へ自動的にNo.・文字・数値などが表示されます。
- この機能を利用することで、シート1とシート2のデータが連動して更新されるような表を作成することが可能です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No2です。遅くなってごめんなさい。 最初のご質問でかなりの労力を使って解答をしておるのですが、実はもっと複雑で違っていましたといわれますとこれ以上の答えはご免こうむりたいですね。時間がたつともう一度考え直しをしなければならないので対応が大変なんです。別にご質問ください。
その他の回答 (4)
No3です。 >エクセルでシート1を入力してあるエクセルのブック と言うのは、シート1にあるリストでしょううか? はいそうです。計算をするシート1をひらいたところで新マクロの記録を行います。 >新マクロを記録するということにして これは、エクセルのツール→マクロ→新しいマクロの記録→マクロの記録でOKボタン? 全くそのとおりです。メニューバーのツールのなかにあるマクロを選択して、そこで新マクロをスタートしておいて、そのあとすぐ記録終了のボタンを押します。 そして、ツール→マクロ→マクロ→編集?? 再びメニューバーのツールのなかにあるマクロを選択して、マクロウインドーのなかでさきほど記録したマクロを選択してそのマクロを編集することにします。するとビジュアルベイシックのウインドーが開きそこにプログラムが現われますのでそのなかにNO1でかいたプログラムをコピー貼り付けをして下さい。そのあとビジュアルベーシックのメニューバーにある実行ボタンを押すと、マクロの計算を実行してシート2に結果が現われます。 バージョンにより多少異なると思いますので、分からないところはまた説明します。
お礼
ご回答、ありがとうございます。 もう一度、挑戦したら「マクロ」出来ました! ところが私のやり方が悪いせいか、シート1に途中から数値を入れてもシート2に反映されません。 どこをどうすれば、何が変わるのか??? ん~。むずかしー! やはり、時間がある時に頑張って挑戦してみます。 大変にありがとうございました。
No1の追加回答です。マクロは簡単ですよ。エクセルでシート1を入力してあるエクセルのブックに、新マクロを記録するということにして、空っぽのマクロを作っておき、次にそのマクロの編集の場面で、私のマクロをコピー貼り付けをしてあとはマクロを実行するだけです。
補足
ご回答、大変にありがとうございます。 ん~~。やはり初心者の私にはハードルが高いようです。 optimumsoupさんが言われた通りに頑張ってみましたが難しいです。 >エクセルでシート1を入力してあるエクセルのブック と言うのは、シート1にあるリストでしょううか? >新マクロを記録するということにして これは、エクセルのツール→マクロ→新しいマクロの記録→マクロの記録でOKボタン? そして、ツール→マクロ→マクロ→編集?? このあたりから、と言うより初めから???です。 わからなくごめんなさい。m(_ _)m 具体的にやりたいことは、No.2の方の補足に書いた通りです。 もし、可能であれば、具体的にわかりやすくお願い出来ませんでしょうか。 お手数掛けますが、どうぞ宜しくお願い致します。
- KURUMITO
- ベストアンサー率42% (1835/4283)
次のようにすればよいでしょう。 シート1には作業列を設け、G2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(ISNUMBER(A2),F2<>""),MAX(G$1:G1)+1,"") 次にシート2では次のようにします。 B1セルには次の式を入力します。 =IF(COUNTIF(Sheet1!$G:$G,ROUNDUP(ROW(A1)/5,0)*2-1)=0,"",INDEX(Sheet1!$A:$A,MATCH(ROUNDUP(ROW(A1)/5,0)*2-1,Sheet1!$G:$G,0))) 上の式を数式バー上でコピーして、その後にB2セルを選択し、数式バー上で「貼り付け」を行います。そこで、数式バー上で$Aを$Bに変更してEnterキーを押します。 B2セルには次の式を入力したことになりますね。 =IF(COUNTIF(Sheet1!$G:$G,ROUNDUP(ROW(A1)/5,0)*2-1)=0,"",INDEX(Sheet1!$B:$B,MATCH(ROUNDUP(ROW(A1)/5,0)*2-1,Sheet1!$G:$G,0))) 次にA3セルを選択して、数式バー上で貼り付けを行い、上記と同様に$Aを$Cに変更して式を確定します。 次にB3セルを選択して、同様に$Aを$Dに変更して式を確定します。 次にC3セルを選択して、同様に$Aを$Eに変更して式を確定します。 次にB4セルを選択して、同様に$Aを$Fに変更して式を確定します。 次にE1セルを選択して、数式バー上に貼り付けをして式を表示させた後で一部を変更して次のような式にして確定します。 =IF(COUNTIF(Sheet1!$G:$G,ROUNDUP(ROW(A1)/5,0)*2)=0,"",INDEX(Sheet1!$A:$A,MATCH(ROUNDUP(ROW(A1)/5,0)*2,Sheet1!$G:$G,0))) 上の式では-1が無くなっているだけです。 この式をコピーしてからE2セルを選択して貼り付けをし、$Aを$Bに変更して式を確定します。 次にD3セルを選択して、同様に$Aを$Dに変更して式を確定します。 次にE3セルを選択して、同様に$Aを$Eに変更して式を確定します。 次にF4セルを選択して、同様に$Aを$Fに変更して式を確定します。 その後にA1セルからF5セルまでを範囲として選択します。右クリックして「セルの書式設定」から「表示形式」の「ユーザー設定」で種類の窓には # と入力します。この操作はセルの中でデータが0の場合に表示をなくすためです。 つぎにA1セルからF5セルまでを選択した状態でF5セルの右下隅に表示される■のフィルハンドルをクリックして下方にドラッグします。 以上の操作によってお望みのデータをシート2に表示させることができます。
補足
ご回答、大変にありがとうございます。 いや~~。驚きました! 出来るんですね。 すごいの一言です。 実はシート1のリストは縦2列になり、シート2は縦6列で下にまた6列、またその下に6列と下に行きます。 また、G列にNo.の様な数値が出ますが、シート1のリストもプリントアウトしますので、表示が出ないようにしたいのですが・・・。 リストの文字や数値を指定の場所へ飛ばしたいのが目的なのですが、やはり初心者の私にはハードルが高く難しいですね。 でも、出来ることがわかりスゴイと思いました。 今思えば、例ではなく最初からもっと詳しく言えば良かったと思います。 具体的に言いますと、シート1の1列目リストは、1・2・3の行に題名等が入り、A4にNo.の1から始まり、B4に品名、C4に数値A、D4に数値B、E4に数値C、F4に計が入り、1列目のリストの最後がA39まで来ます。 2列目リストは、H4にNo.の37から始まり、I4に品名、J4に数値A、K4に数値B、L4に数値C、M4に計が入り、2列目のリストの終わりがH38まで来て、最後にHI39に合計の文字、J39に数値Aの合計、K39に数値Bの合計、L39に数値Cの合計、M39に計の合計、又はJ39・K39・L39の合計。 シート2の1段目は、 DE26・27にNo.、CDE30に品名、C40に数値A、D40に数値B、E40に数値C、CD42・43に数値ABCの合計。 KL26・27にNo.、JKL30に品名、J40に数値A、K40に数値B、L40に数値C、JK42・43に数値ABCの合計。 RS26・27にNo.、QRS30に品名、Q40に数値A、R40に数値B、S40に数値C、QR42・43に数値ABCの合計。 YZ26・27にNo.、XYZ30に品名、X40に数値A、Y40に数値B、Z40に数値C、XY42・43に数値ABCの合計。 AFAG26・27にNo.、AEAFAG30に品名、AE40に数値A、AF40に数値B、AG40に数値C、AEAF42・43に数値ABCの合計。 AMAN26・27にNo.、ALAMAN30に品名、AL40に数値A、AM40に数値B、AN40に数値C、ALAM42・43に数値ABCの合計。 2段目は、 DE90・91にNo.、CDE94に品名、C104に数値A、D104に数値B、E104に数値C、CD106・107に数値ABCの合計。 KL90・91にNo.、JKL94に品名、J104に数値A、K104に数値B、L104に数値C、JK106・107に数値ABCの合計。 RS90・91にNo.、QRS94に品名、Q104に数値A、R104に数値B、S104に数値C、QR106・107に数値ABCの合計。 YZ90・91にNo.、XYZ94に品名、X104に数値A、Y104に数値B、Z104に数値C、XY106・107に数値ABCの合計。 AFAG90・91にNo.、AEAFAG94に品名、AE104に数値A、AF104に数値B、AG104に数値C、AEAF106・107に数値ABCの合計。 AMAN90・91にNo.、ALAMAN94に品名、AL104に数値A、AM104に数値B、AN104に数値C、ALAM106・107に数値ABCの合計。 1段目と2段目と同じ間隔で3段目、4段目と行き、シート1のリストのNo.71まで全品名が入るの(実際は、シート1のリストに数値が入らない箇所が結構あります)を想定いたしまして、シート2を作成したいのですが・・・。 言い忘れましたが、エクセルは2003です。 お手数をお掛け致しまして大変に申し訳ございませんが、何卒よろしくお願い致します。 尚、この様な質問はよろしくないようであれば、新たに質問いたします。
次のマクロを実行してみてください。シート2の書式が少し異なる形式になっていますが、これを直すのは次の段階にさせてください。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2010/10/5 ユーザー名 : ' Dim s1no As Integer, s2cno As Integer, kuno As Integer, kuname As String, v1 As Variant, v2 As Variant, v3 As Variant, kei As Variant, s2l1 As Integer, s2l2 As Integer, s2l3 As Integer, s2l4 As Integer s2cno = 1 For s1no = 2 To 10 Worksheets("sheet1").Activate If Cells(s1no, 6) >= 1 Then kuno = Cells(s1no, 1) kuname = Cells(s1no, 2) v1 = Cells(s1no, 3) v2 = Cells(s1no, 4) v3 = Cells(s1no, 5) kei = Cells(s1no, 6) Worksheets("sheet2").Activate s2l1 = (s2cno - 1) * 4 + 1 s2l2 = (s2cno - 1) * 4 + 2 s2l3 = (s2cno - 1) * 4 + 3 s2l4 = (s2cno - 1) * 4 + 4 Cells(s2l1, 2) = kuno Cells(s2l2, 2) = kuname Cells(s2l3, 1) = v1 Cells(s2l3, 2) = v2 Cells(s2l3, 3) = v3 Cells(s2l4, 2) = kei s2cno = s2cno + 1 Else End If Next ' End Sub
お礼
ご回答、大変にありがとうございます。 初心者の私には、やはり難しいですね。 時間がある時に、挑戦したいと思います。
お礼
ご回答、ありがとうございます。 ご立腹させてしまった様で、すみません。 補足の最後に、この様な質問はよろしくないようであれば、新たに質問いたします。と書いたのですが・・・。 KURUMITOさんが言われる様に、別に質問させて頂きます。 お手数をお掛け致しまして申し訳ございませんでした。 KURUMITOさんのご尽力に大変感謝いたします。 KURUMITOさんの答えが、初めの質問に対して出来る事ができた事と、私の考えに近いと思いますのでベストアンサーと致します。 ありがとうございました。