Dim retsu0 As Integer, retsu1 As Integer, retsu2 As Integer, retsu3 As Integer, retsu4 As Integer
Dim xx As Integer
'転記元ファイルの列構成に関わらずデータ列を認識させる
For xx = 2 To fmSh.Cells(1, Columns.Count).End(xlToLeft).Column
Select Case LCase$(fmSh.Cells(1, xx).Value)
Case "item title": If retsu0 = 0 Then retsu0 = xx
Case "tracking number": If retsu1 = 0 Then retsu1 = xx
Case "shipped on date": If retsu2 = 0 Then retsu2 = xx
Case "sale price": If retsu3 = 0 Then retsu3 = xx
Case "shipping and handling": If retsu4 = 0 Then retsu4 = xx
End Select
Next xx
If retsu0 = 0 Or retsu1 = 0 Or retsu2 = 0 Or retsu3 = 0 Or retsu4 = 0 Then
MsgBox "転記元ファイルが不完全です。列の各項目が揃っているか確認してください。"
Exit Sub
End If
Sub Dlib_FileOpenLoop()
Dim dTo As New dLib
Dim dLs As New dLib '転記元ファイル、シートリスト。A列ID, B列ファイル名、C列シート名
Dim dFm As New dLib
dTo.SetList ThisWorkbook.Worksheets("転記先").Range("C3")
dLs.SetList ThisWorkbook.Worksheets("転記元リスト").Range("A3")
Dim i As Long
Dim sBk As String
Dim sWs As String
For i = dLs.TitleRow + 1 To dLs.GetLastCell.Row
sBk = dLs.rg("ファイル名", i).Value
sWs = dLs.rg("シート名", i).Value
dFm.bkActive sBk
dFm.SetList Workbooks(sBk).Worksheets(sWs).Range("A2") 'A2が表の左端という前提
'処理
dFm.bk.Close SaveChanges:=False
Next
End Sub
2019/02/14 15:38
田中 宏明さんのコメント
(コメントID: 6034)
小川慶一先生:
このライブラリ “dLib for Excel VBA”を少し動かしてみて、VBAの奥深さを知ることができました。 職場にVBAを使える仲間をつくれば、ツールづくりをシェアでき、メンテナンスも含めて効率化できると思っていましたが、他人に期待するよりも、自分がこのライブラリを使いこなせるレベルに達することのほうが早道のような気がしてきました。
田中 宏明さんの投稿
(投稿ID: 4380)
例えば、データ列を移動させても、そのまま動くので、VBAとは別の魔法の言語のように感じました。
実際のところは、クラスモジュールで設計された動きをしているはずなので、ステップ実行F8で観察して確かめてみたいと思います。
どうもありがとうございます。
小川慶一さんのコメント
(コメントID: 6025)
> 例えば、データ列を移動させても、そのまま動くので、VBAとは別の魔法の言語のように感じました。
そこは重要ポイントですね。
よくある面倒を解消すべく作ったライブラリです。
> 実際のところは、クラスモジュールで設計された動きをしているはずなので、ステップ実行F8で観察して確かめてみたいと思います。
dictionaryオブジェクトにセルの識別子を格納するところは、直接オブジェクトへの参照にできそうです。
あと、格納作業前に、列名の重複チェックをする等、まだロジックの改善余地はありそうです。
次リリースではそういうところも含めて直したいと思っています。
田中 宏明さんのコメント
(コメントID: 6032)
> > 例えば、データ列を移動させても、そのまま動くので、VBAとは別の魔法の言語のように感じました。
>
> そこは重要ポイントですね。
> よくある面倒を解消すべく作ったライブラリです。
私の場合、実務で複数のファイルを一つずつ開いて転記するマクロを多用していますが、時間の経過とともに、転記元ファイルのデータ列変更があり、都度のマクロ修正が必ず生じます。
その時点では、忘れていることを思い出す時間も必要で、かなり面倒です。
そこで、以下のように該当項目を列方向に検索して列番号を付与するコードを書いて列変更の修正を回避できたので、大満足していました。
あらためて、レベル違いを思い知ることになりましたが、これをきっかけに、更に上のレベルを目指します。
小川慶一さんのコメント
(コメントID: 6033)
個々に列構成のことなるファイルを順に開いて...という処理だと、dLib以下の要領ですかね。
(所定の列が存在しない場合の処理は除外)
田中 宏明さんのコメント
(コメントID: 6034)
このライブラリ “dLib for Excel VBA”を少し動かしてみて、VBAの奥深さを知ることができました。
職場にVBAを使える仲間をつくれば、ツールづくりをシェアでき、メンテナンスも含めて効率化できると思っていましたが、他人に期待するよりも、自分がこのライブラリを使いこなせるレベルに達することのほうが早道のような気がしてきました。
小川慶一さんのコメント
(コメントID: 6039)
自分のスキルを高めることは大切です。
人がどこまでついてくるか?は、その人の問題ですし。
> 小川慶一先生:
>
> このライブラリ “dLib for Excel VBA”を少し動かしてみて、VBAの奥深さを知ることができました。
> 職場にVBAを使える仲間をつくれば、ツールづくりをシェアでき、メンテナンスも含めて効率化できると思っていましたが、他人に期待するよりも、自分がこのライブラリを使いこなせるレベルに達することのほうが早道のような気がしてきました。
田中 宏明さんのコメント
(コメントID: 6042)
マクロがよくわからない人は、人の作ったマクロで業務効率化を体感できるけど、作者が異動になるとメンテナンスできないので、すぐゴミになる。だから、関数を使って処理することを考えます。
私も経験上、その考え方に共感できますので、“dLib for Excel VBA”を使いこなせるレベルになり、エクセルが使える環境にある限り、メンテナンスフリーで使える自分のためのツールを作り、効率化はこっそりとやるほうがよいとの思いが強くなりました。
> 田中 宏明さん:
>
> 自分のスキルを高めることは大切です。
小川慶一さんのコメント
(コメントID: 6045)
職場の他の人員とのスキル差からの問題はどうしても生じますね。
とはいえ、引き継ぎ時にふさわしい人員を用意するのは職場の責任で、田中さんの責任ではありません。
責任の所在をご自身の中で明らかにし、その範囲のことを粛々とされるのが良いかと思います。
> 小川慶一先生:
>
> マクロがよくわからない人は、人の作ったマクロで業務効率化を体感できるけど、作者が異動になるとメンテナンスできないので、すぐゴミになる。だから、関数を使って処理することを考えます。
>
> 私も経験上、その考え方に共感できますので、“dLib for Excel VBA”を使いこなせるレベルになり、エクセルが使える環境にある限り、メンテナンスフリーで使える自分のためのツールを作り、効率化はこっそりとやるほうがよいとの思いが強くなりました。
>
> > 田中 宏明さん:
> >
> > 自分のスキルを高めることは大切です。
田中 宏明さんのコメント
(コメントID: 6049)
的確なアドバイスありがとうございます。
Excelマクロによるスキルを実務に活用することができると業務の劇的な効率化を実現できます。しかし、そのスキルを持った人が異動や退職になった後、引継ぎやメンテナンスの問題にいずれ直面することになるので、今考えていることを書いてみます。
一つの解決策は、マクロが使える同僚を増やすことですが、元々プログラマーとして雇用されていない職場では、マクロは個人が勝手にやっている位置づけになるので、強制力が働きません。
そこで別の解決方法として、効率化やり方として、よくわからないけどデータをセットしてボタン押したら仕事が終わらせることができる案件が見つかっても、あえて業務の処理過程に、わざと人間が介在させるようなつくりにして、ブラックボックス化を回避します。そして各ステップで処理するマクロは、シンプルかつ汎用的なものに仕上げるというやり方を意識して行っています。
そして“dLib for Excel VBA”を活用することによって、シンプルかつ汎用的にメンテナンスフリーが実現できれば、自分の業務をマクロで効率化しつつ、業務を引き継ぐことも可能になると信じています。
> 田中 宏明さん:
>
> 職場の他の人員とのスキル差からの問題はどうしても生じますね。
>
> とはいえ、引き継ぎ時にふさわしい人員を用意するのは職場の責任で、田中さんの責任ではありません。
> 責任の所在をご自身の中で明らかにし、その範囲のことを粛々とされるのが良いかと思います。