Top > OOobbs > 74

OOobbs/74 Edit

  • サマリ: ワークシート関数について
  • 環境: Basic
  • 状態: 解決
  • 投稿者: jun?
  • 投稿日: 2005-07-16 (土) 12:42:53

質問 Edit

VBAみたいに、Basicでワークシート関数(具体的にはVLOOKUP関数)を使うにはどのようにすればいいでしょうか。

回答 Edit

  • これでどうですか? setFormula( )関数を使って下記のようにしました。
Sub test
 oSheet=ThisComponent.Sheets(0)
 oCell=oSheet.getCellRangeByName("C3")
 oCell.setFormula("=vlookup(B3;B6:C10;2;0)")
End Sub

すみません、お尋ねの主旨とは違うようでした。

  • Kuma? 2005-07-16 (土) 20:49:58
  • OOoBasic/Generic/function のページで関数を使う方法を紹介しています。ワークシートに依存した関数は OOoBasic から使う時には気をつける必要があるかも知れません。 -- はにゃ?? 2005-07-17 (日) 12:34:40
  • 自作関数ではダメですか。 はにゃさんが示して下さった方法は、正規の方法でとても勉強になりました。が理解するのが少し難しいです。 基本的なBASICコード知識を使った下記の様な自作関数を考えられたら如何でしょうか。

ワークシートの例

---   A 列     B列	
行1   pan	
行2	
行3   milk     10
行4   water    20
行5   rice     30
行6   pan      40
行7   fish     50

引数の意味

r1,g1:検索元の文字が入っているセルの列番号と行番号。上表の例では1、1
r2,g2:検索先の文字が入っている最初のセルの列番号と行番号。上表の例では1、3
num  :検索先の文字が入っているセルの行数。上表の例では5
r3   :検索先の文字に対する値が入っている列番号。上表の例では2
Function VLKUP(r1,g1,r2,g2,num,r3)
 oSheet=ThisComponent.getSheets.getByName("表1")
 oCell=oSheet.getCellByPosition(r1-1,g1-1)
 moji1=oCell.getString
 For i=0 to num-1
   oCell=oSheet.getCellByPosition(r2-1,g2-1+i)
   moji2=oCell.getString
   If moji1=moji2 then
     oCell=oSheet.getCellByPosition(r3-1,g2-1+i)
     atai=oCell.getValue
     VLKUP=atai
     Exit Function
   End If
 Next
 MsgBox "見つかりませんでした。"
 End 
End Function
Sub Main
   MsgBox VLKUP(1,1,1,3,5,2)
End Sub -- [[Kuma]] &new{2005-07-18 (月) 17:20:36};
  • OOoBasic/Generic/function のページで使っている方法で VLOOKUP 関数を使ってみました。VLOOKUP 関数がよく分からなかったのです。

次のような表において,

ABC
1
2111
3212
4313
5414

B2:C5 の範囲を検索対象にしました。

Sub FunctionAccess_2
Dim oFunctionAccess As Object
Dim oProcessServiceManager As Object
Dim aArgs(2) As Variant
Dim aResult As Variant
Dim sFunction As String
Dim oRange As Object
  oProcessServiceManager = GetProcessServiceManager()
  oFunctionAccess = oProcessServiceManager.createInstance( _
      "com.sun.star.sheet.FunctionAccess" )

  oRange = ThisComponent.getCurrentController()._
              getActiveSheet().getCellRangeByName("B2:C5")
  sFunction = "VLOOKUP"
  aArgs(0) = 2
  aArgs(1) = oRange
  aArgs(2) = 1
  'aArgs(3) = true
  aResult = oFunctionAccess.callFunction( sFunction, aArgs() ) '--
  MsgBox aResult ' 2
End Sub

MsgBox に表示される結果は 2 です。この方法を使うことでシートに直接関数を入力することなく関数を使用することが出来ます。

注意することは,関数の引数は一つにまとめた Variant 型の配列に入れてやることです。また,セル範囲は文字列として指定するのではなく範囲オブジェクトとして指定してやります。

  • はにゃ?? 2005-07-24 (日) 21:42:44
  • 返事が遅くなり申し訳ありませんでした。 -- jun? 2005-08-23 (火) 15:19:30


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