0

Variant/String の 2 次元配列を範囲に貼り付けようとしています。それは問題ありません。この Variant/String 列には、文字列または double 値を含めることができます。

double 値に 3 つの 10 進数値以上が含まれるセルを除いて、すべて正常に機能します。カンマ (,) は小数点記号で、ドット (.) は私の Excel の桁区切り記号です。

例えば:

配列に2,3が来たらExcelセルに2,3を貼り付ける

配列に 2,34 が来たら Excel セルに 2,34 を貼り付けます

配列に 2,321 が来ると、Excel の cell.value に 2321 が貼り付けられ、cell.text に 2.321 が表示されます。

配列に 2,3215 が来ると、Excel の cell.value に 23215 が貼り付けられ、cell.text に 23.215 が表示されます。

コード:

Dim DataArray(2, 2) As Variant 
...
... code that fills DataArray
...
Range("A1").Resize(UBound(DataArray, 1) + 1,UBound(DataArray, 2) + 1).Offset(1, 0) = DataArray
4

2 に答える 2

2

同様の問題がありました。これは、Excel がバリアント エンド タイプを誤って解釈する典型的なケースです。残念ながら、範囲を設定するためのきちんとしたベクトル式は廃止されなければなりません。代わりに、次のようなものを使用できます (i と j は、変数範囲の左上のセルを指定します)。

Dim cell As Range
Dim x As String
Dim i as integer, j as integer
'The first cell is "A1"
i=1
j=1

For Each cell In Range(Cells(i,j),Cells(i+UBound(DataArray, 1),j+Ubound(DataArray)))
  x = DataArray(cell.Row - i, cell.Column - j)
  cell.Value = x
  'Next line is optional
  If IsNumeric(x) Then cell.NumberFormat = "General"
Next cell

テスト済みで動作します。オプションの行を省略した場合、Excel は形式を推測しますが、ほとんどは正しいものです。数値に必要な形式がわかっている場合は、オプションの行で必ず指定してください。小数点以下の桁数を指定する場合は、「###,##0.00」などの他の形式を試すことができます。

これが役に立ったことを願っています。

于 2013-07-25T03:06:14.370 に答える
0

次の変更でうまく機能します。

Dim cell As Range
Dim x As String
Dim D as Double
Dim i as integer, j as integer
'The first cell is "A1"
i=1
j=1

For Each cell In Range(Cells(i,j),Cells(i+UBound(DataArray, 1),j+Ubound(DataArray)))
  x = DataArray(cell.Row - i, cell.Column - j)
  If IsNumeric(x) Then 
      D = CDbl(x)
      cell.Value = D
  Else
      cell.value = x
  end if
Next cell

どうもありがとう!!!:)

于 2013-07-25T07:20:39.330 に答える