• ベストアンサー

自身のセル番地を取得する関数の自作

NNAQの回答

  • ベストアンサー
  • NNAQ
  • ベストアンサー率56% (104/184)
回答No.5

ThisCellというプロパティを使えばいけます。 Function getCellwidth() As Double With Application .Volatile getCellwidth = .ThisCell.ColumnWidth End With End Function ただ、手動で列幅を変更しただけだと値が変わらないので、 イベントで再計算させなくてはならないですね。 Function getCurrentAddress() As Range ↑は循環参照になってしまい、うまくいかなかった。 ↓なら簡単。 Function getCurrentAddress() As String getCurrentAddress = Application.ThisCell.Address End Function

HenryMancini
質問者

お礼

うおおおお!!! すばらしい! まさに、私の求めていた結果です。 ありがとうございます。 やはりセルを返すと循環参照になってしまいましたか…… ですが、大変満足です。

関連するQ&A

  • セル番地の入力されているセルを参照する方法を教えてください

    それぞれaddress関数を使って、A1~A4にセル番地が入っています。A1とA3のセル番地を参照した数式を作りたいのですが、どうすればできるのでしょうか。教えてください。  | A | B | C | D| 1 A4 2 A10 3 C4 4 C10

  • ExcelのVBAでセルに指定したユーザ関数につい

    ExcelのVBAのユーザ関数について 例えば、 Excelのあるセル、例えば、C1セルの値を引数として、「Function 練習()」 という、ユーザ関数に渡します。 関数内では、引数で渡されてきた値のセル番号を判断し、その次のセルに 値を設定します。 つまり、C1セル(1,4)の値をわたしているので、D1セル(1,5)に値を 設定したいのですが、うまくいきません。 「1つ以上の循環参照が発生しています。循環参照とは、数式が直接的 または間接的に自身のセルを参照している状態を指します。これにより、 計算が正しく行われない可能性があります。 循環参照を削除または変更するか、数式を別セルに移動してください。」 が最初に表示されますが、その後、期待した結果になっていません。 何が起きていて、何がたりないのでしょうか。 よろしくお願いします。 ■内容 A B C D 1 111 222 あ =練習(C1,"-") 2 333 444 い 3 555 666 う 4 777 888 え 5 999 000 お ■関数 Function 練習(myTar As Range, word As String) As String If Len(myTar) = 0 Then 練習 = "" Exit Function End If On Error GoTo era CurRow = myTar.Row CurCol = myTar.Column MsgBox CurRow & ":" & CurCol & ":" & Cells(CurRow, CurCol) Cells(CruRow, CurCol + 1) = "a" 練習 = "○" Exit Function era: 練習 = "#VALUE!" End Function

  • excelで○○と入力されているセル番地を返す方法

    excelについて質問です。 シートAに下記の記述をします。    A    B 1 項目名 セル番地 2 ○○  B7 のような形で、シートBからセル番地を引っ張ってくる方法はありますでしょうか。 セル番地が難しいようであれば、行、列を返す形でもよいです。 上手く質問ができず、申し訳ありません。 できればVBAは使わず、関数で処理できるとベターです。 宜しくお願いいたします。

  • ExcelのVlookup関数で一致した文字のセルの番地を取得する方法

    ExcelのVlookup関数で一致した文字のセルの番地を取得する方法 プログラム(VBA)で、検索で使用する関数でVlookup関数というのがあるというのが最近知ったのですが、Vlookup関数は、検索するセルの範囲を指定して、検索対象の文字列が一致した場合、そのセルの内容(値)を返すという風に書いてあったのですが、値ではなく、そのセルの番地を取得する方法はあるのでしょうか? ありましたら、その方法を詳しく教えてください。Vlookup関数以外でも検索するコードがあるようですが、Vlookup関数に限った場合でよろしくお願いします。 回答よろしくお願いします。

  • 自身のセル番地の列の値を使って自動計算する

    以前こちらで質問させていただきました。 http://okwave.jp/qa/q7097307.html 回答をいただき、希望の値を得られるようになりました。 そこから数式を汎用性のあるものにしようと現在は以下のような式になっています。 E48に入っている数式 =IF(INDIRECT("$D"&ROW())="","",INDEX(INDIRECT("E$1:E$"&$B$27),MATCH(LEFT(INDIRECT("$D"&ROW()),FIND("/",INDIRECT("$D"&ROW()))-1)*1,INDIRECT("D$1:D$"&$B$27),0))/INDEX(INDIRECT("E$1:E$"&$B$27),MATCH(MID(INDIRECT("$D"&ROW()),FIND("/",INDIRECT("$D"&ROW()))+1,10)*1,INDIRECT("D$1:D$"&$B$27),0))) データの終わりのセル番地をB27に記載 この式ですと他の列にコピーして使用できません。 そこでINDIRECT("E$1:E$"&$B$27)この部分のE$1という列を指定している部分を 数式が入っている自身の列としたいと考えました。 自身の列をアルファベットで表す数式を入れることも考えましたが、かなり長くなってしまいます。 =INDIRECT("R"&COLUMN()&"C2",0)のようにR1C1形式で式を書いてみましたが、範囲指定のところで躓きました。 どのように式を書けば、スマートになるのかお教え願いたいです。 よろしくお願いします。

  • 別シートの同じセル番地を参照したい

    質問させていただきます。 同じブック内で、別シートの同じセル番地の値を参照する表を作りたいと思っているます。 イメージとしては、A1にターゲットのシート名が記入されいるとして、 =INDIRECT(ADDRESS(COLUMN(),ROW(),4,TRUE,$A$1)) の様な関数で出来ればと思っているのですが、うまくいきません。 =INDIRECT($A$1&"!B2")等も試してみましたが、コピー&ペーストB2の部分が相対的に変化してくれないので、困っています。 良い方法があれば教えていただきたいので、よろしくお願いいたします。

  • 自作関数からのセル操作

    お世話になります。 ExcelVBAで以下のような自作の関数を作成し、実行するとA1に”hoge”が入力されます。 <自作関数> function hoge() thisworkbook.worksheets("sheet1").range("A1").value = "hoge" end function しかし、ワークシート上のセル”A2”に「=hoge()」と入力してEnterとするとエラーになってA1には何も入力されません。 VBAで作った関数をワークシート上で関数として使う場合、任意のセルのプロパティを変更することはできないのでしょうか? よろしくお願いします。

  • エクセルで数式をコピーする時のセル番地

    エクセルでは相対参照が働き、セル内の数式をコピーすると それに伴って数式内のセル番地が変化します。 普通は、例えばA1に=B1+C1という計算式が入っていて、 A1から下方向にコピーをすると A2→=B2+C2 A3→=B3+C3 となりますが、ここで A2→=B4+C4 A3→=B7+C7 という風に、コピーする行は1行ずつだけど 数式内のセル番地は3個飛びごとにするといった設定はできるのでしょうか。

  • セルに貼り付けた自作関数での書式反映について

    引数で日付を渡し、漢字の曜日一文字が返る関数をVBAで作成しました。 どうせなら日曜日の場合は文字の色を赤色にしようと思い、日曜日の場合だけ文字色を赤にする一文を追加しました。 が、セルにこの関数を貼り付けると曜日は返ってくるのですが、日曜日の場合の赤色が反映されません。 どなたかご教授いただければ嬉しいのですが、、、 宜しくお願い致します! OS:WindowsXP Excel:OfficeXP です。 以下に作成したマクロ関数を貼り付けます。 ********************************************************* Public Function week(d) As String  On Error GoTo err_week  Select Case Weekday(d)  Case vbSunday   week = "日"   Worksheets(Application.Caller.Worksheet.Name).Cells(Application.Caller.Row, Application.Caller.Column).Font.ColorIndex = 3  Case vbMonday   week = "月"  Case vbTuesday   week = "火"  Case vbWednesday   week = "水"  Case vbThursday   week = "木"  Case vbFriday   week = "金"  Case vbSaturday   week = "土"  Case Else   week = "×"  End Select Exit Function   err_week:  week = "ER"  Exit Sub 'End End Function *********************************************************

  • inputboxではセル番地が指定できず困っています。

    EXCEL2000のVBAで、フィルターオプション機能を自動化したいのですが、 抽出先が変動するので、inputboxでセル番地を選択しようとすると、セルを選択することができず、自分で「A1」などと入力すると、きちんとA1に抽出結果が出てくるのですが、自分でセル番地をinputboxに入力するのではなく、マウスでセル番地を指定したいのですが、どのような方法をすればよかったでしょうか? よろしくお願いします。ちなみ作ったVBAは以下のとおりです。(複数の表から同じ条件で抽出し、inputboxで指定したセル番地に抽出結果を出し、その右側に続けて抽出結果を貼り付けていくという感じで作っています) Sub 抽出() Dim Shouhin1 As String Dim Shouhin2 As String Dim Shouhin3 As String Shouhin1 = InputBox("抽出先を指定してください") Shouhin2 = "d" & Mid(Shouhin1, 2, 5)’二つ目の表の抽出先を指定 Shouhin3 = "g" & Mid(Shouhin1, 2, 5)’3つ目の表の抽出先を指定 Sheets("抽出先").Select Sheets("データ").Range("A5:c44").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("B1:B2"), CopyToRange:=Range(Shouhin1), _ Unique:=False Sheets("データ").Select Sheets("抽出先").Select Sheets("データ").Range("d5:f44").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("B1:B2"), CopyToRange:=Range(Shouhin2), _ Unique:=False Sheets("データ").Select Sheets("抽出先").Select Sheets("データ").Range("g5:i44").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("データ").Range("B1:B2"), CopyToRange:=Range(Shouhin3), _ Unique:=False End Sub