- PR -

EXCELSheetno行列の入れ替えて貼り付け

1
投稿者投稿内容
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2003-10-20 17:31
いつも参考にさせていただいてます。
現在ASP.NETからEXCELを出力する処理を開発中です。
やりたいことは
ExcelFORMAT1のデータを(A1,E5)までコピーして
別のシート("ExcelFORMAT2")のA3,E8に貼り付けたいのですが
行列を入れ替えて貼り付けたいのです。
VBAでマクロを作成してそれを参考にしようと考えたのですが
ことごとく
"インデックスが無効です"というエラーで落ちてしまいます。
以下がソースです
------------------------------------------------------------
With objExcelApp
  .Sheet("ExcelFORMAT1").select()
.Range(.Cells(1, 1), .Cells(5, 5)).Select()
.Selection.Copy()
.Sheets("ExcelFORMAT2").Range("A3").Select()
.Sheets("ExcelFORMAT2").Range.pasteTranspose = True
book.Save()
End With
------------------------------------------------------------

どなたか分かる方がいらっしゃればご教授願います。
mito
ベテラン
会議室デビュー日: 2002/05/17
投稿数: 50
投稿日時: 2003-10-21 14:27
PasteSpecialメソッドがどこにも使われていないのですが・・・
また最初のSelect変です。Sheet→Sheets

それとExcelオブジェクトの階層構造などに注意してください。
特にRangeオブジェクトはApplication(Excel)が上位オブジェクトとして指定されていると
ActiveWorksheetが対象になります。
OLEで操作するならきちんと指定した方がいいと思います。
さらに逐次実行してどこでエラーが起きているか調べてみてください。

仕様が分からないので勘で直せば

With objExcelApp
.Sheets("ExcelFORMAT1").Range("A1:E5").Copy()
.Sheets("ExcelFORMAT2").Range("A3").PasteSpecial(X,Y,Z,True)
End With

こんな感じです。XYZは適切なプロパティを指定してください。
Saveは省いてます。
なな
ベテラン
会議室デビュー日: 2003/09/18
投稿数: 79
投稿日時: 2003-10-21 15:07
mitoさん返答ありがとうございました。
アドバイスしていただいたことを参考にして
PasteSpecialメソッドに
PasteSpecial(Transpose:=True)
上記のような処理を入れたところちゃんと行列の入れ替え貼り付けが出来ました。
それ以外にもご指摘ありがとうございました。
これから開発していく上で良い参考になりました。

1

スキルアップ/キャリアアップ(JOB@IT)