• ベストアンサー

OpenOffice表計算のマクロ(Basic)で選択中の結合セルからサイズを取得する方法について教えてください

new-OKWaveの回答

回答No.1

>マクロの内容は選択中の結合されたセルのサイズ(幅と高さ)にあわせて、はみ出さない範囲で拡大した画像を挿入するというものです。 ⇒目的が良く理解出来ません。 当方が疑問に思うことは 1)何故、「セルの結合」を使わなくてはならないのか?CalcはExcelと違いcm単位で高さや幅が設定できますので便利です。 2)画像データのサイズは一定なのか? 3)そもそも何故Calcで画像データの管理をするのか? DataBaseソフトを使う方が楽と思います。 1)に関して別にセル自体の大きさを変えれば済む話だと思います。またその方が簡単だと思います。 2)に関しては画像データサイズがどの程度なのかが分かりません。画像サイズを均一にする事は難しい事ではありません。(Calcには複数の不特定サイズを均一にする拡張機能もあります。) >詳しく書くと、・・・ ⇒記されたコードを見るとExcel VBAのコードの様ですね。(まあ、OOo Basicも対して変わりはありませんが。) >A1からC3まで結合されたセルを選択してマクロを実行するとA1の単一セルのサイズがw_lenとh_lenに入ってしまいます。 ⇒何故「セルの結合」を行い、結合後のサイズが必要なのですか? 別に、1列目~3列目のセルの高さとA列~C列の幅を足せば済むのでは? >MicrosfOfficeに比べてOOoは情報が少なく、またあったとしても分かっている人向けに書いてあることが多く、・・・ ⇒確かにVBAに比べると少ないですが皆無ではありません。 初心者向けには以下の書籍が出版されています。 1)書名:「OpenOffice.org3」、出版社:翔泳社 2)書名:「OpenOffice.orgマクロプログラミング」、出版社:工学社 因みに下記サイトのマクロが参考になると思いますので確認して下さい。 URL : http://openoffice3.web.fc2.com/index.html [参考1] 「2.サンプルマクロ」⇒「実用マクロ100連発(OOoのかけら)画面へ」⇒「15)[Calc]選択範囲の最初と最後の行と列番号を取得」 [参考2] 「2.サンプルマクロ」⇒「実用マクロ100連発(OOoのかけら)画面へ」⇒「71)[Calc]セルの高さと幅を取得する。」

taka6327
質問者

補足

new-OKWaveさん、ご回答をよせていただきありがとうございます。 >1)2)3) >何故「セルの結合」を行い、結合後のサイズが必要なのですか?別に、1列目~3列目のセルの高さとA列~C列の幅を足せば済むのでは?  事情をお話しますと、知人の職場で毎日の報告書作成に使われるエクセルの作業省力化のためのマクロと同等の機能(特定の結合セルで作った枠内にダイアログで指定した画像を自動でリサイズして張り付ける)を持たせるように依頼されました。ちなみに、その最初のエクセルVBAマクロを作った人とはもう連絡を取れないそうです。  セルを結合している理由はその報告書の罫線など書式のためで、その枠の大きさは数種類あるみたいです。画像データはデジカメの写真そのままの場合や一部トリミング加工をしたものを貼り付けることもあるそうです。報告書作成作業のちょとした省力化のためのマクロなので、データベースを使うというのは、よく分からないいですがおそらく大掛かりすぎるのではないかと思います。  上記のような事情でマクロを作る僕自身が直接その職場に関わることはなくトラブル時の保守や責任を考えると、結局タイトルどおり結合セルからサイズを取得する方法を知り、従来のExcelVBAマクロとまったく同じ動きをするOOoBasicマクロをマクロを完成させることが一番助かることになります。 >⇒記されたコードを見るとExcel VBAのコードの様ですね。(まあ、OOo Basicも対して変わりはありませんが。)  以前別の所でちょっとしたExcelVBAマクロを書いた経験があったので 基本的に書き写すだけだなと今回の頼まれごとも気軽に引き受けたのですが、思ったよりもOOoBasicマクロの勝手が違って失敗したなーと後悔しています。^^;  とくにExcelとCalcで結合セルを選択したときに選択範囲が異なること(Calcは結合されたセル中の一番左上のセルのみが選択される仕様らしいです)には困りました。  教えていただいたサイトの情報からは結合セル範囲を知る方法は見つかりませんでした。また、書籍を購入するのは金銭的に余裕がないこともあり、目的の情報が確実に載っていること確認できないと厳しいのが現状です。  

関連するQ&A

  • 選択範囲のセルを1行ずつ結合するマクロ

    こんにちは、いつも参考にさせていただいております。 セルを範囲選択し、 1行ごとに結合させる方法はないでしょうか。 手作業ではなくマクロでの方法を探しています。 イメージとしては (1)範囲選択する (2)マクロ実行する  →列の範囲を1行ずつ、選択している範囲だけ各行を結合 図も添付いたしますので、どうかアドバイス・ヒント頂けないでしょうか。 よろしくお願いいたします。

  • 結合セルの値取得について

    お世話になります、 (環境、VISTA&EXCEL2000) 結合セルに名前をつけて その値をマクロで取得したいのですが エラーになります。 結合セルには結合する前に名前をつけてから 結合してあります。 Dim ws As Worksheet ' On Error GoTo errTrap Set ws = Worksheets("xxxxx") '(1) ws.Range("DenDate").Value = Date '(2) MsgBox ws.Range("DenDate").Value (2)で「型が一致しません」になります。 宜しくお願いいたします。

  • セル結合をマクロで行ないたい(その2)

    度々お世話になっております。 エクセル2000ですが、例えばA1:C10の範囲を選択した状態で、一発で横方向のみのセル結合をする(A1,B1,C1を結合、A2,B2,C2を結合、・・・A10,B10,C10を結合)マクロは可能でしょうか?

  • Excel(セルの結合マクロ)

    いつもお世話になっております。 Excelのマクロで、選択範囲の中で、下のセルが空白のものは、上のセルと結合されるマクロを作りたいと考えています。 (例1:A1セルに”TEST”が入力されており、A2,A3セルが空白として、A1:A3を選択し、マクロを実行するとA1からA3がセル結合される  例2:A1に”TEST2”B2に"TEST3"が入力されており、A1:B3を選択すると、A1からA3が結合され、B2とB3も結合される) 説明が下手で申し訳ないのですが、お力を貸していただけませんでしょうか? よろしくお願いいたします。

  • 【Excelマクロ】 セルの色取得

    古いファイルを加工することが多々あり、セルに塗られている色を調べる(セルの書式設定→塗りつぶし→その他の色→ユーザー設定)のが非常に面倒です。 RGB値をマクロで表示させる方法を見つけたものの、セルが指定(A1/A2/B1)されています。 <1つ右> Sub 色情報取得() Dim r As Long Dim g As Long Dim b As Long n = Range("A1").Interior.Color r = n \ 256 ^ 0 Mod 256 g = n \ 256 ^ 1 Mod 256 b = n \ 256 ^ 2 Mod 256 Range("A2") = r & "," & g & "," & b End Sub <1つ左> Sub 色情報取得() Dim r As Long Dim g As Long Dim b As Long n = Range("A1").Interior.Color r = n \ 256 ^ 0 Mod 256 g = n \ 256 ^ 1 Mod 256 b = n \ 256 ^ 2 Mod 256 Range("B1") = r & "," & g & "," & b End Sub 調べたいセルにカーソルを置いた状態で実行するマクロをご教示ください。 希望1.画像のように1つ右 or 1つ左、もしくはn個右 or n個下など、表示させたいセルを自由に設定したい 希望2.複数セルを一括で処理したい よろしくお願い致します。

  • セル解除後、各行に値をコピーし結合するマクロ

    A1からC3のセルが結合しており、 そのセル結合を解除すると、A列のみ値がコピーされる。 コピーした後、各行ごとにセルを結合していく…… という処理をしたいと思い、 調べて下記のマクロまでなんとかこぎつけました。 Sub セル結合() Dim date1 As Variant Dim range1 As Range Application.DisplayAlerts = False For Each range1 In Selection.Rows If range1(1).MergeCells = False Then range1(1).Merge Else date1 = Selection.Rows(1).Value With range1 .UnMerge .WrapText = False .ShrinkToFit = False Selection.Value = date1 End With End If Next range1 End Sub ※実行範囲に関しては、  任意選択をした範囲にしたいため、  range(1)にて処理を行いました。 困っているのは、上記のマクロを実行すると、 最初の行のみ結合できないということ。 もうひとつが、 セル結合をしない時に値を左端にコピーすると、 文字が自動縮小されてしまいます。 縮小しないようにするには、 どのような処理を入れたら良いでしょうか? お力添え頂けますと幸いです。 よろしくおねがいします。

  • 選択したセルの座標の取得

    選択したセルの座標の取得 sheet1    A B C   1   2  α     3     sheet1のB2にはαという文字が挿入されており、ハイパーリンクの設定がしてあります。 B2をクリックするとsheet2に移行します。 sheet1で選択したセルの位置を取得したいのですが、上手くいきません。 ご教授の程、宜しくお願いします。  現在の記述は以下の通りです。  Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)  Dim gyo As Long  Dim ret As Long  gyo = ActiveCell.Row  ret = ActiveCell.Column  MsgBox "行番号" & gyo & "列番号" & ret  End Sub Sheet1のB2を選択して、Sheet2に移行した時に、Msgboxには、 行番号2 列番号2 というようにしたいのです。

  • 「Wordの表のセルの結合情報」をVBAで取得する

    「Wordの表のセルの結合情報」をVBAで取得する方法 EXCELのVBAであれば、下記サイトの下記マクロで判断できるようなのですが、 Word VBAには、「MergeCellsプロパティ」が無くて、駄目でした。 別の方法で判定出来ない物でしょうか? http://officetanaka.net/excel/vba/tips/tips50.htm ---------------------------------------------------------------------- Sub Sample2() Dim i As Long, buf As String For i = 2 To 9 If Cells(i, 1).MergeCells Then buf = buf & Cells(i, 1).Address(0, 0) & "-->結合されています" & vbCrLf Else buf = buf & Cells(i, 1).Address(0, 0) & "-->結合されていません" & vbCrLf End If Next i MsgBox buf End Sub ヘルプを調べましたが、ざっと見たところ載っていないように思います。 経験あるかた居たらご教授頂けると助かります。

  • マクロ 結合セルへ値のみ貼り付けるにはどうしたらよいでしょうか。

    マクロは初心者で、まだまだ勉強しているところです。 シート名「入出金履歴」のデータを顧客コードごとに分かれている別シートへデータを振り分けて貼り付ける、もしくは反映させたいのですが、貼り付け先のセルがシートの都合上、結合セルになっており、下記のマクロだと当然ながらエラーになってしまいます。結合セルをまず、解除してから貼り付けようと思ったのですが、うまくいかず、困っています。 コピー先の結合状態は、7行目から、列A:C、列D:E、列F:H と、3列になるように結合されています。結合されている行の終わりは、A:C(結合されている)列に「合計」の値が入っているセルの行、H列まで、3列になるよう結合されています。 解除する以外に、良い方法があれば是非教えていただきたいです。 よろしくお願いします。 Sub samplea() r1 = ActiveCell.Row r2 = r1 + Selection.Rows.Count - 1 Dim myRange As Range Dim s_no As String For i = r1 To r2 s_no = Cells(i, 2) Range(Cells(i, 4), Cells(i, 9)).Select Selection.Copy Sheets(Format(s_no)).Select Set myRange = Columns("a:c").Find(what:="合計") If myRange Is Nothing Then Debug.Print "Not Fount" Else myRange.Select Selection.End(xlUp).Offset(1, 0).Select Selection.PasteSpecial Paste:=xlValues Application.CutCopyMode = False Sheets("入出金履歴").Select End If Next End Sub

  • エクセル マクロ セルを縦に結合したいです。

    現在、Visual Basicにてコードを作成中です。(初心者です。) 現時点での出来ること 5列目の2~10行目に何か入力されれば その隣のセルに「お疲れ様です」と入力される(ここまではコード出来てます。) 例:B5セルに何か入力があればC5セルに「お疲れ様です」と入力される。   C5セルに何か入力あればD5セルに「お疲れ様です」と入力される・・・ といった内容です。 そのあとやりたい事(ここからコード出来ません) B5セルに何か入力があればC5セルに「お疲れ様です」と入力された後 C5~10行目を縦に結合し、文字を縦書きにする。 C5セルに何か入力があればD5セルに「お疲れ様です」と入力された後 D5~10行目を縦に結合し、文字を縦書きにする・・・ といった内容です。 一応コード下記に載せます。 Sub macro1() Dim a As Variant Dim i As Long Set a = Worksheets("sheet1") For i = 10 To 2 Step -1 If Len(a.Cells(5, i).Value) > 0 Then 'もし、5列目の2~10行目に何か入力されれば a.Cells(5, i).Offset(0, 1).Value = "お疲れ様です" Exit For End If Next i End Sub すいませんがコード記載よろしくお願いいたします。 回答よろしくお願いします。