Top > OOobbs2 > 18

OOobbs2/18 Edit

  • サマリ: 形式を選択してコピーする
  • 環境: Calc
  • 状態: 解決
  • 投稿者: くま?
  • 投稿日: 2006-12-22 (金) 16:49:22

質問 Edit

 L12からL51まで数値が入力されています。これをH12からコピーしたいのですが、コピー先に書式が設定されているので、この書式を壊さないために値のみコピーするにはどうしたらよいのでしょうか。

回答 Edit

  • 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 を参照。

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

  • はにゃ?? 2006-12-24 (日) 01:08:34
  • いつもありがとうございます。再度、次のようにやってみましたら、エラーが出てしまいます。なぜでしょうか。 -- くま? 2006-12-25 (月) 14:49:43
  • oRangeA = oSheet.getCellRangeByPosition(0,199,6,250) -- くま? 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

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

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

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

SheetABCDEF
1(0,0)(1,0)(2,0)(3,0)(4,0)(5,0)
3(0,1)(1,1)
4Range
5(0,0)(1,0)(2,0)(3,0)
6(0,1)(1,1)(2,1)(3,1)
7(0,2)(1,2)(2,2)(3,2)
8
  • はにゃ?? 2006-12-26 (火) 13:44:57
  • おかげさまで解決いたしました。OOobbs/36にもありますが、マニュアルもなく手探りでやっているので、今後ともよろしくお願いします。 -- くま? 2006-12-27 (水) 10:12:48

感想,コメント,メモ Edit



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