この人頭いいなと思ったエピソード

マクロで次の作業を処理したいのですが、どのようなコードを書けばよいのでしょうか?教えてください。よろしくお願いします。

○sheet1
☆左側
列B~Hをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。
D列には固定の文字列が与えられており、E列はブランクで、D・Eともに非表示にしておきたい。

B10~B59には、固定で1~50の数字が順番に与えられている。
C10~C59、G10~G59、H10~H59には数値が、F10~F59には文字列が入力される。
空白の場合もあり、どの行に入力されるかは不明。

☆右側
列J~Pをワンセットとしたものが、計51行ある。先頭はタイトル行で9行目である。

J10~J59には、固定で51~100の数字が順番に与えられている。
K10~K59、M10~M59、O10~O59、P10~P59には数値が、L10~L59、N10~N59には文字列が入力される。
空白の場合もあり、どの行に入力されるかは不明。

○sheet2
sheet1のボタンをクリックし、sheet2を表示させ、
sheet1の値を次のようにsheet2に貼付けたい。

sheet2のB8~H107の範囲内で上から、sheet1の左側B10~H59と右側J10~P59の空白を含む行を除いた
セット(列B~H、列J~P)のみをコピーし、左側と右側を連続して、値のみ貼付けたい。

※C列とK列の空白を判定すれば良い
※並べ替えなどのために別シートを置きたくない
※非表示列の扱い方

A 回答 (1件)

何か、おととい回答したの(↓)と瓜二つの質問ですね。

(笑)

質問では、非表示列の扱い方をどうしたいのかわかりませんので、とりあえずこんな感じです。

Sub test2()
Dim S1 As Worksheet, S2 As Worksheet
Dim a As Integer, b As Integer, i As Integer, n As Integer
Set S1 = Sheets("Sheet1")
Set S2 = Sheets("Sheet2")
n = 7
For i = 10 To 109
If i > 59 Then
a = 50
b = 8
End If
If S1.Cells(i - a, 3 + b) <> "" Then
n = n + 1
S2.Range(S2.Cells(n, 2), S2.Cells(n, 8)).Value _
= S1.Range(S1.Cells(i - a, 2 + b), S1.Cells(i - a, 8 + b)).Value
End If
Next
End Sub

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=1106399

この回答への補足

失礼いたしました。非表示のD列(固定の文字列)の値も貼り付けたいということです。よろしくお願いします。

補足日時:2004/12/02 11:30
    • good
    • 0
この回答へのお礼

ありがとうございます。思い通りとなりました。参考URLは、知人です。できたといって喜んだ後に非表示列の文字の処理を忘れていて、困っていたそうです。たいへん失礼いたしました。とても感謝しております。

お礼日時:2004/12/02 11:36

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


おすすめ情報