|
初マグロ!・・・ではありません。初マクロです。期待した方、すみません。 別に誤読を誘って、一見さんを呼び込む意図があるわけではなく・・・、いや、誤読でもこれはまだ可愛いほうでしょうか!? 先日、ある人に「タダモノではありませんね」とメールしたら・・・。 タダモノがケダモノに読めます。。。 予期せぬ返事に思わずのけぞってしまいました。 カタカナにしたのに深い意味はなかったのですが・・・、カタカナで送ってよかったです。 のっけから話がそれまくりですが・・・、年が明けてから、初めて組んだマクロのこと・・・。きょうのことではなく、きのうの話・・・、何が楽しくて元日からExcelマクロをいじっているのでしょう? 自問自答しても答えは出てきませんが、はっきりしているのはこんなのは圧倒的少数派であるということ・・・。 <本日のお題> ・9つの同じ要素から構成される2つのデータセット(データAとデータB)を組み合わせて 新たなデータセットを作る。 <方法> ・2つのデータセットのいずれかしかシート上(シート名"main")には取り込めないので、 一方を取り込んだら別シート(シート名"sub")に必要な要素をコピペしておく。 そして、もう一方を"main"に取り込んだ後、"sub"にコピペしておいたデータを上書きする。 例)要素1・要素2はデータA、ほかの要素はデータBのデータセットを作成する場合 1)要素1・要素2のフラグを1とする。 2)データAをシート"main"に取り込む。 3)マクロ「コピペ1」でシート"main"の要素1・要素2をシート"sub"にコピペ。 4)データBをシート"main"に取り込む。 5)マクロ「コピペ2」でシート"sub"の要素1・要素2をシート"main"にコピペ または 1)要素3〜要素9のフラグを1とする。 2)データBをシート"main"に取り込む。 3)マクロ「コピペ1」でシート"main"の要素3〜要素9をシート"sub"にコピペ。 4)データAをシート"main"に取り込む。 5)マクロ「コピペ2」でシート"sub"の要素3〜要素9をシート"main"にコピペ ・取り込む要素の組み合わせに制限は設けない。 シート"sub"上に9つあるフラグで取り込むか否かを決定する。 フラグが1の場合は対応する要素がコピペされ、0の場合はコピペされない。 そんなわけで、マクロを作成したのですが、データAとデータBはそれぞれ別な方法で作られたものなので、組み合わせることにどれほど意味があるのか、という問題が残ります。オペレーションのことだけ考えると、編集しやすい要素を組みまわせるのは一つの手なのですが・・・、根本対応には程遠く、やっぱり自問自答してしまいます。 おまけにデータAとデータBは1要素のデータ数が異なっていて・・・、「コピペ1」「コピペ2」のマクロでコピペするデータ数が異なるのはこれが理由。同じにすると、「コピペ2」でシート"main"に値を返したとき、空白が生じる可能性があるのです。 今年もやっつけ仕事で始まってしまいました。もう少し先の見通しのあることをしないといけませんね。 -------------------------------------------------- Sub コピペ1() Dim f(10) As Single Application.ScreenUpdating = False Sheets("sub").Select ’残っている(かもしれない)データを消去 Range(Cells(10, 4), Cells(400, 62)).Select Selection.Clear ’セルC1〜セルC9に入っている、要素1〜要素9のフラグを読み取る フラグが1ならばコピーする。0ならばコピーしない。 For j = 1 To 9 f(j) = Cells(j, 3) Next j Sheets("main").Select ’データセットから地点数を読み取る。 9行ごとに文字が入っているかをチェックし、空白だったら地点数をaaとし、次へ For i = 1 To 100 If Cells(9 * i + 1, 3) <> "" Then aa = i End If Next i ’フラグが1の要素をmainからsubにコピペ。1要素のデータ数は52。 For j = 1 To 9 If f(j) = 1 Then For i = 1 To aa Sheets("main").Select Range(Cells(i * 9 + j, 11), Cells(i * 9 + j, 62)).Select Selection.Copy Sheets("sub").Select Cells(i * 9 + j, 11).Select ActiveSheet.Paste Next i End If Next j Cells(1, 1).Select Application.ScreenUpdating = True End Sub -------------------------------------------------- Sub コピペ2() Dim f(10) As Single Application.ScreenUpdating = False Sheets("sub").Select ’セルC1〜セルC9に入っている、要素1〜要素9のフラグを読み取る フラグが1ならばコピーする。0ならばコピーしない。 For j = 1 To 9 f(j) = Cells(j, 3) Next j Sheets("main").Select ’データセットから地点数を読み取る。 9行ごとに文字が入っているかをチェックし、空白だったら地点数をaaとし、次へ For i = 1 To 100 If Cells(9 * i + 1, 3) <> "" Then aa = i End If Next i ’フラグが1の要素をmainからsubにコピペ。1要素のデータ数は36。 For j = 1 To 7 If f(j) = 1 Then For i = 1 To aa Sheets("sub").Select Range(Cells(i * 9 + j, 11), Cells(i * 9 + j, 46)).Select Selection.Copy Sheets("main").Select Cells(i * 9 + j, 11).Select ActiveSheet.Paste Next i End If Next j Cells(1, 1).Select Application.ScreenUpdating = True End Sub -------------------------------------------------- |
| << 前記事(2008/01/01) | トップへ | 後記事(2008/01/03)>> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2008/01/01) | トップへ | 後記事(2008/01/03)>> |