「入力」と「データ」というシートを作り、「入力」シート側で入力したデータを「データ」シートへ蓄積していくというVBコードでした。
これは、「入力」と「データ」というシートにしか反応しないプログラムなので、単純明快なのですが、同じブックに目的の異なる複数のデータベースを作成したいという場合、「入力」と「データ」というシートだけでは、対応できません。
そこで、データを入力するシートと出力(蓄積)するシートを指定し、その指定されたシート間で反応するように改変しました。
以下がそのVBコードです。
Sub dhenkan2()
'
' データベース変換
'
Dim nyu As Integer, db As Integer
Dim wk1 As String
Dim wk2 As String
On Error GoTo Err_wkname
wk1 = Worksheets("コントロール").Range("b1")
wk2 = Worksheets("コントロール").Range("b2")
If Not wk1 = ActiveSheet.Name Then
MsgBox "入力シートに指定したシートではありません!"
Exit Sub
End If
nyu = Worksheets(wk1).Range("a1").CurrentRegion.Rows.Count
db = Worksheets(wk2).Range("a1 ").CurrentRegion.Rows.Count
For Count = 1 To nyu
Worksheets(wk2).Cells(db + 1, Count) = Worksheets(wk1).Cells(Count, 2)
Next
For Count = 1 To nyu
If Not Worksheets(wk1).Cells(Count, 2).HasFormula Then
Worksheets(wk1).Cells(Count, 2).ClearContents
End If
Next
Worksheets(wk1).Range("b1").Select
Exit Sub
Err_wkname:
MsgBox "存在しないシート名を指定しました。"
End Sub
「dehenakn」からの流れなので「dhenkan2」というプログラム名になってます。
コードの貼り付け方や使い方はほとんど同じです。(データベース変換①~コードを貼り付ける ②dhenkanマクロの使い方を参照)
今度は「入力」「データ」シートにこだわる必要はなくなりました。
代わりにシートを設定する「コントロール」というシートを作成します。

この「コントロール」シートのセル「B1」にデータを入力するシート名、「B2」に出力(蓄積)するシートと名を設定します。セル「A1」「A2」には適当に項目名を付けてください。私はわかりやすく「入力」と「出力」と付けました。
たとえば、入力側「顧客入力」、出力側「顧客データ」としたい場合は・・・・・・

このように「コントロール」シートの「入力」と「出力」にシート名を入力します。

そうすると、ここで指定したシート間でのみデータが動きます。
別なシート間でのデータ入力する場合は・・・・・・

このように変更します。

1つのブックに目的の異なるデータベースをどんどん作成していけます。
「入力」と「出力」に指定するシート名を間違うと大変なことになるので慎重に。
もちろん、存在しない「シート」を指定するとエラーがでます。安心してください。

よかったら使ってみてください。
0 件のコメント:
コメントを投稿