KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

Excel-VBA

なぜ

事務の仕事でauto-fillで終わらない繰り返し作業が生じた page, sheet ごとになる.

Target

2019.03.01 to 03.31までのJ1 to J43 これを一つのtableにまとめて重複を簡単に見つけられるようにする

この操作を2019.02.xlsxから2020.03.xlsxまでやる

uxmilk.jp

My Solution

空白せる含めて,売り伝番号があるJ Col 4 Row to 43 Rowを全て取得し

collection.xlsmに並べる

月ごとのfile(book) , 日毎のsheet, 項目ごとのcell,

これを二重ループで取得する

Sub putbook1901sheet01d5toActiveCell()
    Dim book1 As Workbook
    Dim str As String
    Workbooks.Open "C:\Users\mycompany\OneDrive\_日報\1901.xlsx"
    
    Set book1 = Workbooks("1901.xlsx")
    str = book1.Worksheets("1").Range("d5").Value
    
    Workbooks.Open "C:\Users\mycompany\OneDrive\_日報\collection.xlsm"
    ActiveCell.Value = str

End Sub

これで取得はできたが,pageを変数から読み取るのがうまくいかない.

UXMILKの記事を見てみる

uxmilk.jp

Dim page
page = 1
str = book1.WorkSheets(page).Range("d5").Value

これで1 pageのd5が取得できない.

とりあえずloopはこれがわかりやすい

www.excel-easy.com

経理の裏ワザ!Excelでシート名をセル参照する方法

これを読むとINDIRECTを使えば引数に計算結果を使えるらしい

Reactでいう { hoge++ } で計算されるような感じかな?

=INDIRECT( A2 & “!B3” )

これにより、A2セルに「Sheet1」と入力されていれば

らしい!!簡単?

www.contextures.com

これでいけそう

=INDIRECT("'" & A2 & "'!" & B2)

できない

エクセル文字列結合わからん!!!

J忘れてた

=INDIRECT("'" & B5 & "'!J" & C5)

完成

結局VBA使わなかったけど,英語で調べるの強いね