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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
【VBA】配列とWorksheetFunction.Transpose
Visual Basic(VBA)
-
For~Next ループ内でUnionメソッドを使うとエラーになります。
Visual Basic(VBA)
-
-
4
VBAで配列のNULL判定
その他(プログラミング・Web制作)
-
5
[VBA]改行入りのセルの値を配列に格納したい
Visual Basic(VBA)
-
6
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
7
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
VBA シートをコピーする際に Copyメソッドは失敗しましたのエラーが出てしまいます
Visual Basic(VBA)
-
10
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
11
コンボボックスにリストが表示されません・・・
Excel(エクセル)
-
12
VBで引数にDictionaryオブジェクトを使用する方法
Visual Basic(VBA)
-
13
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
14
オートフィルタをマクロで作成したときに列番号ではなく文字で判別させたい
Visual Basic(VBA)
-
15
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
16
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
17
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
18
ApplicationとWorksheetFunctionの違い
Visual Basic(VBA)
-
19
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
20
UserForm1.Showでエラーになります。
工学
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラスに配列を渡す方法
-
リストボックスに縦スクロール...
-
VBAのautofilter、criteriaの配...
-
Powershell $変数 = @()の空配...
-
perl qw(aaa bbb ccc)[$hoge]...
-
3から100までの素数を配列に入...
-
python における配列とはなんで...
-
画面を強制的に再描画させる方法
-
DoEventsが必要な理由について
-
VBA Dir関数でファイルをループ...
-
VBのReturnの使い方
-
スレッド起動したフォームを正...
-
ボタンが押された時にループか...
-
objective-cの多重ループbreak
-
スリザーリンクの問題をランダ...
-
UWSCの終了の仕方
-
【VBA】全て空白のセルの列の非...
-
VB ループ中の値をゆっくり出力
-
たぶん初歩の問題ですが。。。
-
【続き】統計解析Rを使った作図
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラスに配列を渡す方法
-
エクセルVBAでTransposeの不思議
-
Excel VBA ユーザーフォームの...
-
VBAのautofilter、criteriaの配...
-
Strawberry Perl for Windows ...
-
二次元配列における要素数のは...
-
VB6で配列の最大値を簡単に求め...
-
リストボックスに縦スクロール...
-
文字の整列(printf)
-
ファイル名に日付・時刻を付与...
-
DataGridViewに配列の値を表示...
-
チェックボックスのperlでの値...
-
一致する要素が格納されている...
-
隣同士の数字を足し合わせる
-
perlで配列の要素が空なのを知...
-
条件に一致した塩基配列を含む...
-
perlで2次元配列をサブルーチ...
-
マクロ Publicでの配列定義
-
二次元配列のインデックスについて
-
perl 配列の要素数について
おすすめ情報