こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル あるシートから別シートへ貼り付け

どなたかお助け下されば、大変ありがたく存じます!

エクセルに関する質問です。



コピー元エクセルシートのセル(B2、B3、B4、B5・・・B100)に数値が入力されています。

その値を、別シートのセル(C2、C25、C48、C71、・・・C2256、C2279)に貼り付けたい場合、

何か良い方法は無いものでしょうか。




貼り付け先となるセルは、等差数列的に決まっており、

フィルタでその指定セル(C2、C25、C48・・・C2256、C2279)を抽出することも可能です。

単純に、貼り付け先セルへ、C2セル「=コピー元シート!$B2」と入力すると、

C25「=コピー元シート!$B25」、C48「=コピー元シート!$B48」・・・となってしまい、

うまく貼り付けることが出来ません。

理想は、

C2セル「=コピー元シート!$B2」、C25「=コピー元シート!$B3」、

C48「=コピー元シート!$B4」、・・・、C2279「=コピー元シート!$B100」としたいのです。

(コピー元)→(貼り付け先)
B2→C2
B3→C25
B4→C48
B5→C71
B6→C93
・・・
B99→C2256
B100→C2279



何か良い方法があればお教え願えますでしょうか。

どうかよろしくお願い申し上げます!!

投稿日時 - 2012-07-14 09:59:52

QNo.7589546

困ってます

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

こんにちは
お邪魔します
 
同じ作業を何度も繰り返すようでしたらマクロになると思いますが、それはそれで、
シートデザインに関するテクニックは色んな場面で必要になることが多いですから、
応用し易そうな方法を参考として挙げてみます。
 
その前に確認ですが
> B2→C2
> B3→C25
> B4→C48
> B5→C71
> B6→C93
・・・
> B99→C2256
> B100→C2279
 これは、
B2→C2
B3→C25
B4→C48
B5→C71
B6→C94
・・・
B99→C2233
B100→C2256
 ということでよろしいでしょうか。
 あるいは
B101→C2279
 迄あるのかも知れませんが。
 
・作業列を2列使ってそれを基準に並べ替えをします。
(1)コピー先シートのC列とD列の間に2列挿入してD:E列を作業列とします。
(2)D2:D2256を選択。そのまま数式 =ROW() をタイプして Ctrl + Enter で数式を確定します。
(3)E2:E2256を選択。そのまま数式 =MOD(ROW(),23)=2 をタイプして Ctrl + Enter で数式を確定します。
(4)D:E列を選択してコピー、そのままの選択状態で、
[形式を選択して貼り付け]-[値]を実行して
書いたばかりの数式を定数に直します。
※D列は元々の行位置を示す値です。
※E列は、C列で値を貼りたい行だけ TRUE、それ以外は FALSE、になっています。
(5)C:E列を選択して[並べ替え]
  [タイトル行]にチェック
  [最優先されるキー]列E、降順
  [2番目に優先されるキー]列D、昇順
  [OK]
(6)C2:C100(101?)の範囲に数式 =コピー元!$B2 を連続で設定する、とか、
直接、コピー元!B2:B100(101?)からコピペする、とか。
(7)C:E列をD列基準に再度並べ替えて元に戻します。
(8)作業に使ったD:E列については
要らないなら削除するとか、
また使うなら邪魔にならない列に移動するとか、非表示にするとか。
 
作業は以上です。
文字にすると長いですが実際の作業時間は短いです。
これは是非実践して覚えておくといいと思います。
また似たような課題にあたった時「どうしよう」と考えている間に解決できると思います。
試してみてください。
 
以上です。

投稿日時 - 2012-07-15 00:01:03

ANo.5

こんにちは!
横からお邪魔します。

マクロでの一例です。
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i As Long, k As Long, ws As Worksheet
Set ws = Worksheets("コピー元シート")
k = 2
For i = 2 To ws.Cells(Rows.Count, 2).End(xlUp).Row
Cells(k, 3) = ws.Cells(i, 2)
k = k + 23
Next i
End Sub 'この行まで

※ 「コピー元シート」のB2セル~最終行までとしています。
※ 関数でないので、すぐに反映されません。
データ変更があるたびにマクロを実行する必要があります。
※ データが表示されたセルに数式が入っている場合、数式は消えてしまいます。

お望みの方法でなかったらごめんなさいね。m(_ _)m

投稿日時 - 2012-07-14 17:50:00

No.3です。ちょっと間違えました、ごめんなさい。No.2の式中、INDEX関数の中の「a:a」という部分を「b:b」に差し替えてください。

投稿日時 - 2012-07-14 13:10:33

数式は簡単に書けるのですが、コピー(というかセル参照)の後に、質問者さんがどうされたいかですね。それによって、最適な方法も変わってくるからです。とりあえずの式を書いておきますね。

別シートのC2セル
=if(mod(row(),23)=2,index(コピー元シート!a:a,int(row()/23)+2),"この文字列は別途、置換でまとめて削除するとか")

この数式を確定後、C2セルをコピーして、C3:C2279の範囲に貼り付け。その方法は分かりますか?例えば、C2をコピーし、続いて、名前ボックス(数式バーの左にあるボックス)に「c3:c2279」と入力してEnterキーを押せば、その範囲が選択されるので、貼り付けられます。

投稿日時 - 2012-07-14 13:01:17

ANo.2

例えばコピー元をシート1としたら別のシートのC2セルには次の式を入力して下方にドラッグコピーします。

=IF(MOD((ROW(A1)-1)/23,1)=0,INDEX(Sheet1!B$2:B$100,ROUNDUP(ROW(A1)/23,0)),"")

投稿日時 - 2012-07-14 11:14:10

「コピー元シート」を Sheet1 としたとき、「貼り付け先」シートのセル C2 に次式を入力して、此れを下方にズズーッとドラッグ&ペーストすれば好い。
=IF(MOD((ROW(A1)-1)/23,1),"",OFFSET(Sheet1!B$2,(ROW(A1)-1)/23,))

投稿日時 - 2012-07-14 10:43:45

あなたにオススメの質問