天使と悪魔選手権

現在Sheet1のA21からQ21の17個のセルにデータが入っています。(これは同じシート内の
データが飛ぶようになっているので厳密には計算式が入っています。なぜならその個々のデータのセルが点在しているためです)また、E14に項番を入力するセルがあります。
そしてSheet2のA列に項番が振られており、B~R列のA行に17個の項目名が入っています。
このエクセルで、E14に項番を入れて実行すれば、Sheet1のA21からQ21のデータを
Sheet2の先と同じ項番の行のB~R列にコピーするマクロを作りたいのですが
うまくいきません。どのようなコード書けばよいのでしょうか;

A 回答 (1件)

具体的なアナタのエクセルの姿にキチンと正確に合った姿で、マクロは作らないと意味がありません。


それから。項番を入力する「E14」には、何か計算式で現れるんじゃなく、実際に手で記入する事が前提です。


たとえば。
「項番」が単純な1,2,3…で、その番号の1,2,3がシート2の2行目、3行目、4行目…に対応しているなら。

手順:
シート1のシート名タブで右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub worksheet_change(byval Target as excel.range)
 if target.address <> "$E$14" then exit sub
 if target = "" then exit sub
 worksheets("Sheet2").range("B1:R1").offset(range("E14").value).value = range("A21:Q21").value
end sub

1,2,3番の対応するシート2の行位置がずれてるなら、それに見合った行に転記するようにご自分でマクロを修正してください。



たとえば。
「項番」が何かの言葉?で、シート2のA列から該当の値をわざわざ検索して探さなきゃならないようなことなら(ついでに言えば、該当する項番が実際にはシート2のA列に記入されていない場合といった事まで考えなきゃならないなら)

手順:
シート1のシート名タブで右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub worksheet_change(byval Target as excel.range)
 dim h as range
 if target.address <> "$E$14" then exit sub
 if target = "" then exit sub
 set h = worksheets("Sheet2").range("A:A").find(what:=range("E14").value, lookin:=xlvalues, lookat:=xlwhole)
 if h is nothing then
  msgbox "NOT FOUND"
  exit sub
 end if
 h.resize(1, 17).value = range("A21:Q21").value
end sub

言わずもがなですがこの手のマクロはシートに1つしか登録できないので、別のマクロを試すときはマクロを消して書き換えます。
    • good
    • 0
この回答へのお礼

keithin様、ご回答ありがとうございます。完璧で非の打ち所のないご回答に
びっくりしました。確かに項番が1から連続で割り振られているのか、そもそも
ない番号も存在するのかといった色々なことを考える必要がありますよね。
前提条件が全然足りない質問で大変申し訳ございませんでした。
ありがとうございました。

お礼日時:2012/05/26 13:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!