質問する

Revision history [back]

click to hide/show revision 1
最初のバージョン

マクロでのセル領域が2個での条件付き書式でSource Position を正しく設定するには?

LibreOffice6.2.3.2マクロ(basic) で

複数セル範囲に1つの数式で条件付き書式を 設定しました。
しかし、設定された条件付き書式は 定義数式が壊れます。

定義数式("$A3<=$A$2")を壊さないためには
どこを修正すれば良いでしょうか?。

表の大きさは A1:Q250 1行目=見出し 2行目=データ管理行 3行目=データ

●A列
シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
A3~A184行・・・18/03/31~19/11/27が入力済
A185~A250行・・・空白
●A2:=today()として本日日付を表示
●B-C列・・・摘要でかな文字
●D,H-I,Q列・・・数値
●E-G列・・文字列

●条件定義してる範囲とスタイル

A3:A250 , E3:G250 -- セル領域が2つ
"文字G + 中央揃え"

「文字G」-- フォント色でG=緑
「揃え」-- セル内の横位置
日本語表記なので「G,+,空白」はそれぞれ半角で入力

マクロを走らせると条件付き書式は正しく機能

が、定義数式("$A3<=$A$2")→("$A5<=$A$2")に
壊れます。

推定するに oCondition(0).Name = "SourcePosition"に定義してる値
oCondition(0).Value = oRange.RangeAddresses(0)
が正しくないと思われます。

A3:A250 , E3:G250の2つの領域の
1つ目のA3:A250の左上セルの位置(=A3)
を掴むメソッドまたはプロパティはあるのでしょうか?

簡略化したコード
Sub SetConditionalStyle_ABDEGHIQ() Dim oRange as object
Dim oConFormat'Conditional format object
Dim oCondition(3) As New com.sun.star.beans.PropertyValue
Dim sAddress
oCondition(0).Name = "SourcePosition"
oCondition(1).Name = "Operator" oCondition(2).Name = "Formula1"
oCondition(3).Name = "StyleName"

Dim a: a = array("A3:A250,E3:G250") Dim s: s = "文字G + 中央揃え" Dim n as long, i as long

sAddress = Split( a(0), ",")
oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(sAddress) oRange.addRangeAddress(ThisComponent.Sheets(0).getCellRangeByName(sAddress(i)).RangeAddress,False) next

oCondition(0).Value = oRange.RangeAddresses(0)
oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(2).Value = "$A3<=$A$2"
oCondition(3).Value = s

oConFormat = oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

End Sub


マクロでのセル領域が2個での条件付き書式でSource Position を正しく設定するには?

LibreOffice6.2.3.2マクロ(basic) で

複数セル範囲に1つの数式で条件付き書式を 設定しました。
しかし、設定された条件付き書式は 定義数式が壊れます。

定義数式("$A3<=$A$2")を壊さないためには
どこを修正すれば良いでしょうか?。

表の大きさは A1:Q250 1行目=見出し 2行目=データ管理行 A1:Q250
1行目=見出し
2行目=データ管理行
3行目=データ

●A列
シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
A3~A184行・・・18/03/31~19/11/27が入力済
A185~A250行・・・空白
●A2:=today()として本日日付を表示
●B-C列・・・摘要でかな文字
●D,H-I,Q列・・・数値
●E-G列・・文字列

●条件定義してる範囲とスタイル

A3:A250 , E3:G250 -- セル領域が2つ
"文字G + 中央揃え"

「文字G」-- フォント色でG=緑
「揃え」-- セル内の横位置
日本語表記なので「G,+,空白」はそれぞれ半角で入力

マクロを走らせると条件付き書式は正しく機能

が、定義数式("$A3<=$A$2")→("$A5<=$A$2")に
壊れます。

推定するに oCondition(0).Name = "SourcePosition"に定義してる値
oCondition(0).Value = oRange.RangeAddresses(0)
が正しくないと思われます。

A3:A250 , E3:G250の2つの領域の
1つ目のA3:A250の左上セルの位置(=A3)
を掴むメソッドまたはプロパティはあるのでしょうか?

簡略化したコード
Sub SetConditionalStyle_ABDEGHIQ() Dim oRange as object
Dim oConFormat'Conditional oConFormat 'Conditional format object
Dim oCondition(3) As New com.sun.star.beans.PropertyValue
Dim sAddress
oCondition(0).Name = "SourcePosition"
oCondition(1).Name = "Operator" oCondition(2).Name = "Formula1"
oCondition(3).Name = "StyleName"

Dim a: a = array("A3:A250,E3:G250") array("A3:A250,E3:G250")
Dim s: s = "文字G + 中央揃え" 中央揃え"
Dim n as long, i as long

sAddress = Split( a(0), ",")
oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(sAddress) oRange.addRangeAddress(ThisComponent.Sheets(0).getCellRangeByName(sAddress(i)).RangeAddress,False) oRange.addRangeAddress(ThisComponent.Sheets(0).getCellRangeByName(sAddress(i)).RangeAddress,False)
next

oCondition(0).Value = oRange.RangeAddresses(0)
oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(2).Value = "$A3<=$A$2"
oCondition(3).Value = s

oConFormat = oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

End Sub


マクロでのセル領域が2個での条件付き書式でSource Position を正しく設定するには?

LibreOffice6.2.3.2マクロ(basic) で

複数セル範囲に1つの数式で条件付き書式を 設定しました。
しかし、設定された条件付き書式は 定義数式が壊れます。

定義数式("$A3<=$A$2")を壊さないためには
どこを修正すれば良いでしょうか?。

表の大きさは A1:Q250
1行目=見出し
2行目=データ管理行
3行目=データ

●A列
シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
A3~A184行・・・18/03/31~19/11/27が入力済
A185~A250行・・・空白
●A2:=today()として本日日付を表示
●B-C列・・・摘要でかな文字
●D,H-I,Q列・・・数値
●E-G列・・文字列

●条件定義してる範囲とスタイル

A3:A250 , E3:G250 -- セル領域が2つ
"文字G + 中央揃え"

「文字G」-- フォント色でG=緑
「揃え」-- セル内の横位置
日本語表記なので「G,+,空白」はそれぞれ半角で入力

マクロを走らせると条件付き書式は正しく機能

が、定義数式("$A3<=$A$2")→("$A5<=$A$2")に
壊れます。

推定するに oCondition(0).Name = "SourcePosition"に定義してる値
oCondition(0).Value = oRange.RangeAddresses(0)
が正しくないと思われます。

A3:A250 , E3:G250の2つの領域の
1つ目のA3:A250の左上セルの位置(=A3)
を掴むメソッドまたはプロパティはあるのでしょうか?

簡略化したコード
Sub SetConditionalStyle_ABDEGHIQ() SetConditionalStyle_ABDEGHIQ()

Dim oRange as object
Dim oConFormat 'Conditional format object
Dim oCondition(3) As New com.sun.star.beans.PropertyValue

Dim sAddress

oCondition(0).Name = "SourcePosition"
oCondition(1).Name = "Operator" "Operator"
oCondition(2).Name = "Formula1"
oCondition(3).Name = "StyleName"

Dim a: a = array("A3:A250,E3:G250")
Dim s: s = "文字G + 中央揃え"
Dim n as long, i as long

sAddress = Split( a(0), ",")
oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(sAddress) oRange.addRangeAddress(ThisComponent.Sheets(0).getCellRangeByName(sAddress(i)).RangeAddress,False) oRange.addRangeAddress(ThisComponent.Sheets(0). _ getCellRangeByName(sAddress(i)).RangeAddress,False)
next

oCondition(0).Value = oRange.RangeAddresses(0)
oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(2).Value = "$A3<=$A$2"
oCondition(3).Value = s

oConFormat = oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

End Sub


マクロでのセル領域が2個での条件付き書式でSource Position を正しく設定するには?

LibreOffice6.2.3.2マクロ(basic) で

複数セル範囲に1つの数式で条件付き書式を 設定しました。
しかし、設定された条件付き書式は 定義数式が壊れます。

定義数式("$A3<=$A$2")を壊さないためには
どこを修正すれば良いでしょうか?。

表の大きさは A1:Q250
1行目=見出し
2行目=データ管理行
3行目=データ3行目以降=データ

●A列
シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
A3~A184行・・・18/03/31~19/11/27が入力済
A185~A250行・・・空白
●A2:=today()として本日日付を表示
●B-C列・・・摘要でかな文字
●D,H-I,Q列・・・数値
●E-G列・・文字列

●条件定義してる範囲とスタイル

A3:A250 , E3:G250 -- セル領域が2つ
"文字G + 中央揃え"

「文字G」-- フォント色でG=緑
「揃え」-- セル内の横位置
日本語表記なので「G,+,空白」はそれぞれ半角で入力

マクロを走らせると条件付き書式は正しく機能

が、定義数式("$A3<=$A$2")→("$A5<=$A$2")に
壊れます。

推定するに oCondition(0).Name = "SourcePosition"に定義してる値
oCondition(0).Value = oRange.RangeAddresses(0)
が正しくないと思われます。

A3:A250 , E3:G250の2つの領域の
1つ目のA3:A250の左上セルの位置(=A3)
を掴むメソッドまたはプロパティはあるのでしょうか?

簡略化したコード
Sub SetConditionalStyle_ABDEGHIQ()

Dim oRange as object
Dim oConFormat 'Conditional format object
Dim oCondition(3) As New com.sun.star.beans.PropertyValue

Dim sAddress

oCondition(0).Name = "SourcePosition"
oCondition(1).Name = "Operator"
oCondition(2).Name = "Formula1"
oCondition(3).Name = "StyleName"

Dim a: a = array("A3:A250,E3:G250")
Dim s: s = "文字G + 中央揃え"
Dim n as long, i as long

sAddress = Split( a(0), ",")
oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(sAddress) oRange.addRangeAddress(ThisComponent.Sheets(0). _ getCellRangeByName(sAddress(i)).RangeAddress,False)
next

oCondition(0).Value = oRange.RangeAddresses(0)
oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(2).Value = "$A3<=$A$2"
oCondition(3).Value = s

oConFormat = oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

End Sub


マクロでのセル領域が2個での条件付き書式でSource Position を正しく設定するには?

LibreOffice6.2.3.2マクロ(basic) で

複数セル範囲に1つの数式で条件付き書式を 設定しました。
しかし、設定された条件付き書式は 定義数式が壊れます。

定義数式("$A3<=$A$2")を壊さないためには
どこを修正すれば良いでしょうか?。

表の大きさは A1:Q250
1行目=見出し
2行目=データ管理行
3行目以降=データ

●A列
シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
A3~A184行・・・18/03/31~19/11/27が入力済
A185~A250行・・・空白
●A2:=today()として本日日付を表示
●B-C列・・・摘要でかな文字
●D,H-I,Q列・・・数値
●E-G列・・文字列

●条件定義してる範囲とスタイル

A3:A250 , E3:G250 -- セル領域が2つ
"文字G + 中央揃え"

「文字G」-- フォント色でG=緑
「揃え」-- セル内の横位置
日本語表記なので「G,+,空白」はそれぞれ半角で入力

マクロを走らせると条件付き書式は正しく機能

が、定義数式("$A3<=$A$2")→("$A5<=$A$2")に
壊れます。

推定するに oCondition(0).Name = "SourcePosition"に定義してる値
oCondition(0).Value = oRange.RangeAddresses(0)
が正しくないと思われます。

A3:A250 , E3:G250の2つの領域の
1つ目のA3:A250の左上セルの位置(=A3)
を掴むメソッドまたはプロパティはあるのでしょうか?

簡略化したコード
Sub SetConditionalStyle_ABDEGHIQ()

Dim oRange as object
Dim oConFormat 'Conditional format object
Dim oCondition(3) As New com.sun.star.beans.PropertyValue

Dim sAddress

oCondition(0).Name = "SourcePosition"
oCondition(1).Name = "Operator"
oCondition(2).Name = "Formula1"
oCondition(3).Name = "StyleName"

Dim a: a = array("A3:A250,E3:G250")
Dim s: s = "文字G + 中央揃え"
Dim n as long, i as long

sAddress = Split( a(0), ",")
oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
for i=0 to ubound(sAddress) oRange.addRangeAddress(ThisComponent.Sheets(0). _ getCellRangeByName(sAddress(i)).RangeAddress,False)
next

oCondition(0).Value = oRange.RangeAddresses(0)
oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
oCondition(2).Value = "$A3<=$A$2"
oCondition(3).Value = s

oConFormat = oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

End Sub


マクロでのセル領域が2個での条件付き書式でSource Position を正しく設定するには?

LibreOffice6.2.3.2マクロ(basic)

複数セル範囲に1つの数式で条件付き書式を 設定しました。
しかし、設定された条件付き書式は 定義数式が壊れます。

定義数式("$A3<=$A$2")を壊さないためには
どこを修正すれば良いでしょうか?。

で複数セル範囲に1つの数式で条件付き書式を設定しました。 しかし、設定された条件付き書式は定義数式が壊れます。

定義数式($A3<=$A$2)を壊さないためにはどこを修正すれば良いでしょうか?。

  • 表の大きさは A1:Q250
    1行目=見出し
    2行目=データ管理行
    A1:Q250

    • 1行目=見出し
    • 2行目=データ管理行
    • 3行目以降=データ

      ●A列

  • A列

    • シリアル値ベースの日付 形式:yy/mm/dd 昇順に並んでる
    • A3~A184行・・・18/03/31~19/11/27が入力済
      A185~A250行・・・空白
      ●A2:=today()として本日日付を表示
      ●B-C列・・・摘要でかな文字
      ●D,H-I,Q列・・・数値
      ●E-G列・・文字列

      ●条件定義してる範囲とスタイル

    • A185~A250行・・・空白
  • A2:=today()として本日日付を表示
  • B-C列・・・摘要でかな文字
  • D,H-I,Q列・・・数値
  • E-G列・・文字列

条件定義してる範囲とスタイル

  • A3:A250 , E3:G250 -- セル領域が2つ
    セル領域が2つ
  • "文字G + 中央揃え"

    中央揃え"

    • 「文字G」-- フォント色でG=緑
      フォント色でG=緑
    • 「揃え」-- セル内の横位置
      セル内の横位置
    • 日本語表記なので「G,+,空白」はそれぞれ半角で入力

マクロを走らせると条件付き書式は正しく機能

が、定義数式("$A3<=$A$2")→("$A5<=$A$2")に
が、定義数式($A3<=$A$2)→($A5<=$A$2)に 壊れます。

推定するに oCondition(0).Name = "SourcePosition"に定義してる値
"SourcePosition"
に定義してる値 oCondition(0).Value = oRange.RangeAddresses(0)
oRange.RangeAddresses(0)
が正しくないと思われます。

A3:A250 , E3:G250の2つの領域の
1つ目のA3:A250の左上セルの位置(=A3)
E3:G250の2つの領域の1つ目のA3:A250の左上セルの位置(=A3) を掴むメソッドまたはプロパティはあるのでしょうか?

簡略化したコード

簡略化したコード

Sub SetConditionalStyle_ABDEGHIQ()  

SetConditionalStyle_ABDEGHIQ() Dim oRange as object
object Dim oConFormat 'Conditional format object
object Dim oCondition(3) As New com.sun.star.beans.PropertyValue

Dim sAddress

com.sun.star.beans.PropertyValue Dim sAddress oCondition(0).Name = "SourcePosition"
"SourcePosition" oCondition(1).Name = "Operator"
"Operator" oCondition(2).Name = "Formula1"
"Formula1" oCondition(3).Name = "StyleName"

"StyleName" Dim a: a = array("A3:A250,E3:G250")
array("A3:A250,E3:G250") Dim s: s = "文字G + 中央揃え"
中央揃え" Dim n as long, i as long

long sAddress = Split( a(0), ",")
",") oRange = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges") for i=0 to ubound(sAddress) oRange.addRangeAddress(ThisComponent.Sheets(0). _ getCellRangeByName(sAddress(i)).RangeAddress,False)
next

getCellRangeByName(sAddress(i)).RangeAddress,False) next oCondition(0).Value = oRange.RangeAddresses(0)
oRange.RangeAddresses(0) oCondition(1).Value = com.sun.star.sheet.ConditionOperator.FORMULA
com.sun.star.sheet.ConditionOperator.FORMULA oCondition(2).Value = "$A3<=$A$2"
"$A3<=$A$2" oCondition(3).Value = s

s oConFormat = oRange.ConditionalFormat oConFormat.addNew(oCondition()) oRange.ConditionalFormat
oConFormat.addNew(oCondition())
oRange.ConditionalFormat = oConFormat

= oConFormat End Sub


Sub