こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBAで解らないコードの意味を教えてくれませんか?

お世話になります。
以前こちらでVBAで質問した際に下記のようなコードを教えていただきました。足し算のコードと言うのは分かるのですが、SUM以降の意味がどうも理解できませんでした。どなたか判る方教えていただけませんでしょうか?

ws.Range(ws.Cells(r, 2), ws.Cells(r, c)).Formula = "=SUM([" & .Parent.Name & "]" & .Name & "!A3:A" & .Rows.Count & ")"

よろしくお願いします。

投稿日時 - 2008-06-19 20:07:58

QNo.4113536

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

ws
シート名。シートを限定。
Range(ws.Cells(r, 2), ws.Cells(r, c)).Formula
rが行を指定、cは列を指定。
ここまでのステップで具体的に決まっている必要アリ
セル範囲 セルB列r行からC列r行までの範囲に数式SUM関数を設定
"=SUM([" & .Parent.Name & "]" & .Name & "!A3:A" & .Rows.Count & ")"
文字列で式を表し、それをFormulaエリアに代入している=>式を設定している。
[]内はブック指定、.Nameはシート名か
With wsが前にあるはず。無いのは質問者が意味がわかっていないのでカットしたのだろう。また対のEnd Withがあるはず。
!は素の前部がシート名が来ている区切りのしるし。
Rows.Count
シートの行数。2003までは65536.
"!A3:A" & .Rows.Count
!A3:A65536になる
.Parent.Name
のいみは原理的に、むつかしいが、シートなどのオブジェクトは階層構造で、シートオブジェクトの直上のブックオブジェクトの名前を取るいうこと。

投稿日時 - 2008-06-19 21:06:20

ANo.2

多分、ある範囲のセルに式を設定しています。
 =SUM([○○]△△!A3:A◇)
察するに、○○、△△、はファイル名、シート名で◇はA列の範囲を示すための数字、までは想像できますが、後は#1の方同様情報不足です。

投稿日時 - 2008-06-19 20:30:16

ANo.1

この記述の前に

With ****
というような記述がありませんか?

この
With ****
の部分がわからないと具体的な回答はしにくいと思います。
略さないでコードをアップしてみてください。

投稿日時 - 2008-06-19 20:11:59

補足

皆さん、申し訳ありませんでした。私も意味も解らず省略してしまいました。
補足でコードを書き出してみます。
これは毎日送られてくる日計表のデータを他のブックの集計表に日にちごとに集計するものを作ったものです。

==========================
Sub sample()
Dim ws As Worksheet
Dim file As Variant
Dim r As Long
Dim c As Long
ChDir ThisWorkbook.Path
file = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
If file = False Then Exit Sub

Application.ScreenUpdating = False
With Workbooks.Open(file)
With .Sheets(1)

Set ws = ThisWorkbook.Sheets(StrConv(Month(.Range("A1")), vbWide) & "月")
r = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
c = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

.Range("A1").Copy Destination:=ws.Cells(r, 1)
ws.Range(ws.Cells(r, 2), ws.Cells(r, c)).Formula = "=SUM([" & .Parent.Name & "]" & .Name & "!A3:A" & .Rows.Count & ")"
End With
ws.Range(ws.Cells(r, 2), ws.Cells(r, c)).Copy
ws.Range(ws.Cells(r, 2), ws.Cells(r, c)).PasteSpecial xlPasteValues
Application.CutCopyMode = False
.Close
End With
Application.ScreenUpdating = True
End Sub

===========================
というような感じです。

投稿日時 - 2008-06-19 21:35:51

あなたにオススメの質問