Top > OOobbs2 > 18
** [[OOobbs2/18]] [#g1abbcc8]
-''サマリ'': 形式を選択してコピーする
-''環境'': Calc
-''状態'': 解決
-''投稿者'': [[くま]]
-''投稿日'': 2006-12-22 (金) 16:49:22
*** 質問 [#p3cad5fc]
 L12からL51まで数値が入力されています。これをH12からコピーしたいのですが、コピー先に書式が設定されているので、この書式を壊さないために値のみコピーするにはどうしたらよいのでしょうか。
*** 回答 [#pb8c0b78]
- A1:A5 から B1:B5 へ値のみを書き込むとして、

 Sub Main
 Dim oDoc As Object, oSheets As Object, oSheet As Object
 Dim oRangeA As Object, oRangeB As Object
   oDoc = ThisComponent
   oSheets = oDoc.getSheets()
   oSheet = oSheets.getByIndex(0)
   oRangeA = oSheet.getCellRangeByPosition(0,0,0,4) 'A1:A5
   oRangeB = oSheet.getCellRangeByPosition(1,0,1,4) 'B1:B5
   
   For i = 0 To 4
     oRangeB.getCellByPosition(0,i).Value = oRangeA.getCellByPosition(0,i).Value
   Next i
 End Sub

セルごとの値を取得してコピー先に入れてやります。

値以外に数式などが混じっているのであれば、[[OOoBasic/Calc/contenttype]] を参照。

ほかには、マクロの記録から使用できる方法が使えそうですが、お勧めできません。

-- [[はにゃ?]] &new{2006-12-24 (日) 01:08:34};
- いつもありがとうございます。再度、次のようにやってみましたら、エラーが出てしまいます。なぜでしょうか。 -- [[くま]] &new{2006-12-25 (月) 14:49:43};
- 			oRangeA = oSheet.getCellRangeByPosition(0,199,6,250) -- [[くま]] &new{2006-12-25 (月) 14:50:08};
- どのようなエラーかわからないので判断できませんが、上記の範囲指定で IndexOutOfBoundsException はでないでしょうから、oSheet 変数のせいでしょうか?

			oRangeA = oSheet.getCellRangeByPosition(0,199,6,250)
			oRangeB = oSheet.getCellRangeByPosition(11,10,17,61)
			for i = 0 to 6
				for j = 0 to 51
				oRangeB.getCellByPosition(i+11,j+10).Value = oRangeA.getCellRangeByPosition(i,j+199).Value
				next j
			next i

 oRangeB.getCellByPosition(i+11,j+10).Value = oRangeA.getCellRangeByPosition(i,j+199).Value

の行ですが、サブセル範囲 oRangeB のインデックスはこのセル範囲で左上のセルが 0,0 になります。ですから、

 oRangeB.getCellByPosition(i,j).Value = oRangeA.getCellRangeByPosition(i,j+199).Value

としてください。エラーはインデックスが範囲外だったということのようです。

-- [[はにゃ?]] &new{2006-12-25 (月) 23:28:03};
- 上記の通り行いましたら、IllegalArgumentException......arguments len differ が出たので、右辺のRangeを削り、試してみたところやはりIndexOutOfBoundsException メッセージが出ました。範囲外ということでしょうか。引数の設定の仕方が今ひとつ分かりません。バッファー(A200:G251)の各データをL11:R62に値のみを複写するという簡単な作業ですが・・・・。                              -- [[くま]] &new{2006-12-26 (火) 09:43:25};
- すいません、右側を修正するのを忘れていました。以下のようにすればいいと思います。

 oRangeB.getCellByPosition(i,j).Value = oRangeA.getCellRangeByPosition(i,j).Value

シート上の緑の範囲をサブセル範囲 B5:E7 とすると、それぞれのセルのインデックスは表中のように振りなおされると考えられます。

|Sheet|A|B|C|D|E|F|
|1|(0,0)|(1,0)|(2,0)|(3,0)|(4,0)|(5,0)|
|3|(0,1)|(1,1)|||||
|4|Range||||||
|5||BGCOLOR(#ccffcc):(0,0)|BGCOLOR(#ccffcc):(1,0)|BGCOLOR(#ccffcc):(2,0)|BGCOLOR(#ccffcc):(3,0)||
|6||BGCOLOR(#ccffcc):(0,1)|BGCOLOR(#ccffcc):(1,1)|BGCOLOR(#ccffcc):(2,1)|BGCOLOR(#ccffcc):(3,1)||
|7||BGCOLOR(#ccffcc):(0,2)|BGCOLOR(#ccffcc):(1,2)|BGCOLOR(#ccffcc):(2,2)|BGCOLOR(#ccffcc):(3,2)||
|8|||||||
-- [[はにゃ?]] &new{2006-12-26 (火) 13:44:57};
- おかげさまで解決いたしました。OOobbs/36にもありますが、マニュアルもなく手探りでやっているので、今後ともよろしくお願いします。 -- [[くま]] &new{2006-12-27 (水) 10:12:48};

#comment
*** 感想,コメント,メモ [#y64cec09]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes