Untidy Bookshelves

アクセスカウンタ

help リーダーに追加 RSS *** 初マクロ ***

<<   作成日時 : 2008/01/02 23:01   >>

トラックバック 0 / コメント 0

 マグロ・・・ではありません。マクロです。期待した方、すみません。

 別に誤読を誘って、一見さんを呼び込む意図があるわけではなく・・・、いや、誤読でもこれはまだ可愛いほうでしょうか!?
 先日、ある人にタダモノではありませんねとメールしたら・・・。

  タダモノケダモノに読めます。。。
   
 予期せぬ返事に思わずのけぞってしまいました。
 カタカナにしたのに深い意味はなかったのですが・・・、カタカナで送ってよかったです。

 のっけから話がそれまくりですが・・・、年が明けてから、初めて組んだマクロのこと・・・。きょうのことではなく、きのうの話・・・、何が楽しくて元日から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

--------------------------------------------------

設定テーマ

関連テーマ 一覧

月別リンク

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文