9

以下が機能しないのはなぜですか。

Range(Cells(1,1)).Value = 3

Cells(1,1)A1本質的に右を使用するのと同じことですか?

(私はただできることを理解していますがCells(1,1).Value = 3、なぜそれがうまくいかないのか興味があります。)

MSDN のエントリを読んだところ、最初の引数はA1スタイルでなければならないことが示されていますが、次のようなものが機能します。

Range(Cells(1,1), Cells(2,3)).Value = 2

完全に混乱しています。

4

7 に答える 7

5

Cells プロパティを使用して範囲オブジェクトのパラメーターを指定する場合 (私の記憶が正しければ、しばらくの間 VBA を使用していません)、2 つの引数を効果的に指定する必要があります。

したがって、セルが 1 つしかない範囲オブジェクトを参照する場合は、次のように記述する必要があります。

Range(Cells(1, 1), Cells(1, 1)).value = "Hello World"
于 2013-07-14T03:25:42.920 に答える
3

このように単一のセルを参照する代わりに:

Range(Cells(1,1), Cells(1,1))

あなたは書ける:

 Range(Cells(1,1).Address)
于 2015-05-04T12:56:45.367 に答える
2

単一のセルの場合は、はるかに簡単です。デフォルトの Cells() 関数を使用します。

Cells(1,1) = "hello world"

またはシートの Cells() 関数を使用します。

Dim sht as Worksheet
Set sht = Sheets("myworksheet") ' or: = Sheets(1)
sht.Cells(1,1) = "hello world" 

範囲については、ここに記載されている他の回答で説明されているように、2 つのパラメーターを使用する必要があります。ただし、フィールドの範囲全体を値に設定できるという利点があります。また、「アクティブなシート」ではないシートで、舞台裏で作業することもできます。例えば:

Const colRand = 4
Const colDiff = 5

Dim sht as Worksheet, rngHi As Range, rngRand As Range, rngDiff As Range
Set sht = Sheets("myworksheet") ' or: = Sheets(1)

Set rngHi = sht.Range(sht.Cells(1,1), sht.Cells(3,3)
rngHi = "hello world" 

Set rngRand = sht.Range(sht.Cells(1,colRand), sht.Cells(8,colRand) ' column 4, rows 1-8
rngRand = "=RAND()"

Set rngDiff = sht.Range(sht.Cells(2,colDiff), sht.Cells(8,colDiff) ' column 5, rows 2-8
' using FormulaR1C1 in case the sheet isn't set to use that type of formula
Set rngDiff.FormulaR1C1="=RC[-1] - R[-1]C[-1]" ' on previous columnn, diff between this row and previous row

説明:

Cells 関数は
文字列パラメーター- A1_And_Colon スタイル範囲を指定するか、
または2 つの Cell パラメーター- 範囲の開始セルと終了セルのいずれかを受け取ります。

したがって、「セル」で範囲を設定するには、両方のセルをカンマで区切る必要があります。

Range(Cells(1,1), Cells(1,1)) = "hello world"
Range(Cells(2,2), Cells(3,4)) = "you cannot square around, but you can round a square"
Sheets(1).Cells(5,5) = "=Round(Sqrt(5))"
于 2016-12-20T21:11:43.983 に答える
1

I'm writing this answer because I'm learning VBA and it took me the better part of three days to figure out what was happening here, and the official documentation does not discuss this topic at all. This QA is good but the information is a bit scattered, from my perspective today.

Here's what I know about using the Cells() property inside a Range() object to reference a single-cell range. Which I need to do all the time!

Given a valid ws object...

You think this will work:

ws.Range(ws.Cells(i,j))

It doesn't. You'll get Run-time error '1004': Method 'Range' of object'_Worksheet' failed.

The obvious fix, as described by @Woody_Pride is:

ws.Range(ws.Cells(i,j), ws.Cells(i,j))

Unfortunately, having to do this is absolutely infuriating, and is not actually strictly necessary.

What you actually need is, as asserted by @Willby, although the explanation as to why this is the case is actually in the answer by @chris_neilsen:

ws.Range(ws.Cells(i,j).Address)

This will also work, as suggested by @pashute (who is wrong in most parts of his explanation):

ws.Cells(i,j)

Thank you to everyone who contributed on this page; I feel like I now, finally, have the entire picture.

于 2019-09-20T19:07:42.937 に答える
-3

「セル」を使用する場合、 Application.cells(2,2) や activeWorksheet.cells などの Object.cells を定式化する必要があります。

于 2014-10-26T13:00:12.410 に答える