MS Officeのエクセル2000です。
下記Sub test01はRange("A1:I1")に文字列を入力し、一旦配列に取り込んでからワークシートに貼り付けるものです。
試験用のコードですので意味はありません。
このコードで255文字まではまったく問題はありません。
ところが、256文字以上の場合、横に貼り付けは問題ないのですが、 Transposeで縦に変換すると型が一致しません。(Error 13)となります。
どうしてでしょうか?
試行錯誤の結果、Sub test02のように一旦横に貼ったデータをコピーしてTransposeして貼り付けるのは大丈夫のようですので不思議でしょがありません。
またこの方法は列数256より要素が多い配列には使えないので解決策にはなりません。
ご教示くださいませ。
Sub test01()
Dim myAr As Variant
Dim i As Integer, n As Integer
n = 256 '文字数
With ActiveSheet
.UsedRange.ClearContents
For i = 1 To 9
.Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n)
Next
myAr = .Range("A1:I1").Value
.Range("A3").Resize(, UBound(myAr, 2)).Value = myAr
.Range("A5").Resize(UBound(myAr, 2)).Value = Application.Transpose(myAr) '256文字の場合エラー
End With
End Sub
Sub test02()
Dim myAr As Variant
Dim i As Integer, n As Integer
n = 256 '文字数
With ActiveSheet
.UsedRange.ClearContents
For i = 1 To 9
.Cells(1, i).Value = Application.Rept(Left(.Cells(1, i).Address(0, 0), 1), n)
Next
myAr = .Range("A1:I1").Value
.Range("A3").Resize(, UBound(myAr, 2)).Value = myAr
.Range("A3").Resize(, UBound(myAr, 2)).Copy
.Range("A5").PasteSpecial Paste:=xlValues, Transpose:=True '256文字の場合もOK
Application.CutCopyMode = False
End With
End Sub
No.2ベストアンサー
- 回答日時:
VBAでワークシート関数を使う時、《引数に配列を渡す》場合、要素の文字数及び要素数に制限があります。
『オートメーションを使用して ADO レコードセットのデータを Excel に転送する方法』
http://support.microsoft.com/kb/246335/ja
このkbに簡単に触れてあります。
<引用ここから>
Excel の Transpose 関数を使用して配列を入れ替える場合は、Transpose 関数の次の制限に注意してください。
* 配列に 255 文字を超える要素を含めることはできません。
* 配列に Null 値を含めることはできません。
* 配列内の要素数が 5461 を超えることはできません。
<引用ここまで>
▽ここも参照しておいたほうが良いかもしれません。
『オートメーションを使用して Excel に配列を渡すことの XL の制限事項』
http://support.microsoft.com/kb/177991/ja
また、Transposeに限らず、他のワークシート関数でも該当します。
Sub test()
Const n1 As Long = 256
Const n2 As Long = 5462
Dim v, w, x, y
v = Array("a", String(n1, "a"))
ReDim w(1 To n2)
On Error GoTo errHndr
With Application
1: x = .CountA(v)
2: x = .Transpose(v)
3: x = .Index(v, 1)
4: y = .CountA(w)
5: y = .Transpose(w)
6: y = .Index(w, 1)
End With
Erase w
Exit Sub
errHndr:
MsgBox "Line " & Erl & vbLf & Err.Number & " : " & Err.Description
Resume Next
End Sub
>Sub test02のように一旦横に貼ったデータをコピーしてTransposeして貼り付けるのは大丈夫のようですので不思議でしょがありません。
test02はワークシートTranspose関数ではなく、PasteSpecialメソッドですから、比較にはなりません。
解決策としては、Loop処理で自前で入れ替えてあげれば良いかと。
配列処理なので速度的には大差ないと思います。
>.Range("A5").Resize(UBound(myAr, 2)).Value = Application.Transpose(myAr) '256文字の場合エラー
.Range("A5").Resize(UBound(myAr, 2)).Value = vTrans(myAr)
':
Private Function vTrans(v As Variant) As Variant
Dim L1 As Long, U1 As Long
Dim L2 As Long, U2 As Long
Dim rn As Long, cn As Long
Dim i As Long, j As Long
L1 = LBound(v, 1)
U1 = UBound(v, 1)
L2 = LBound(v, 2)
U2 = UBound(v, 2)
cn = 0
ReDim x(1 To U2 - L2 + 1, 1 To U1 - L1 + 1)
For i = L1 To U1
cn = cn + 1
rn = 0
For j = L2 To U2
rn = rn + 1
x(rn, cn) = v(i, j)
Next j
Next i
vTrans = x
End Function
#余談ですが、2003からは要素数5,461の制限は65,536に改善されています。
#要素数というより、次元あたりの要素数のようですが。
> Excel の Transpose 関数を使用して配列を入れ替える場合は、Transpose 関数の次の制限に注意してください。
存じませんでした。
ありがとうございます。勉強になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
【VBA】配列とWorksheetFunction.Transpose
Visual Basic(VBA)
-
VBAで配列のNULL判定
その他(プログラミング・Web制作)
-
-
4
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
7
VBで引数にDictionaryオブジェクトを使用する方法
Visual Basic(VBA)
-
8
【エクセル】「実行時エラー’1004’ InteriorクラスのColorIndeXプロパティを設定できません。」とは?
Excel(エクセル)
-
9
エクセルVBAで5行目からオートフィルタモードに設定したいたい
Excel(エクセル)
-
10
InputBoxの入力値を半角数字のみと限定する方法
Excel(エクセル)
-
11
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
12
配列の参照渡しで型が一致しません。
Visual Basic(VBA)
-
13
レコードセットの中身を配列に、そしてワークシートに。
Visual Basic(VBA)
-
14
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
15
VBAでテーブル名とカラム名を動的に取得したい。
Visual Basic(VBA)
-
16
Excel 1セル当りの文字数が255文字を超える場合のADOからの取
その他(プログラミング・Web制作)
-
17
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
18
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
19
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
20
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラスに配列を渡す方法
-
VBAのautofilter、criteriaの配...
-
perl 初等プログラミングについて
-
マクロ Publicでの配列定義
-
VB6で配列の最大値を簡単に求め...
-
一致する要素が格納されている...
-
VBA 二次元配列の1つ目を増...
-
Strawberry Perl for Windows ...
-
DBIを使ってSelect文 複数のカ...
-
perl 配列の要素数について
-
newで個別に生成した配列にNULL...
-
ファイル名に日付・時刻を付与...
-
エクセルVBAでTransposeの不思議
-
Python IndexError:list index ...
-
Excel VBA ユーザーフォームの...
-
perlfaq4 で紹介されている Fis...
-
VBでカンマで区切られた、要素...
-
不特定数存在する特定文字直後...
-
ランダムな8桁の文字作成
-
ファイルからデータを読み込ん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
Strawberry Perl for Windows ...
-
リストボックスに縦スクロール...
-
二次元配列のインデックスについて
-
文字の整列(printf)
-
エクセルVBAでTransposeの不思議
-
クラスに配列を渡す方法
-
二次元配列における要素数のは...
-
Excel VBA ユーザーフォームの...
-
perlで配列の要素が空なのを知...
-
perlで2次元配列をサブルーチ...
-
マクロ Publicでの配列定義
-
Dim flag(4) as boolean で配列...
-
参照配列の要素数の求め方は?
-
チェックボックスのperlでの値...
-
VB6で配列の最大値を簡単に求め...
-
jcode->jfold で禁則処理
-
DataGridViewに配列の値を表示...
-
VBScript 配列
-
配列を使わずに、数字(連番)...
おすすめ情報