Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1754 / 13645 ツリー ←次へ | 前へ→

【72137】マクロ? 関数式? よっしー123 12/6/7(木) 13:12 質問[未読]
【72138】Re:マクロ? 関数式? UO3 12/6/7(木) 13:42 発言[未読]
【72139】Re:マクロ? 関数式? よっしー123 12/6/7(木) 14:58 お礼[未読]
【72140】Re:マクロ? 関数式? マルチネス 12/6/7(木) 16:22 発言[未読]
【72143】Re:マクロ? 関数式? よっしー123 12/6/7(木) 21:44 回答[未読]
【72147】Re:マクロ? 関数式? マルチネス 12/6/8(金) 9:17 発言[未読]
【72145】Re:マクロ? 関数式? UO3 12/6/7(木) 22:11 発言[未読]
【72152】Re:マクロ? 関数式? よっしー123 12/6/9(土) 10:49 お礼[未読]
【72153】Re:マクロ? 関数式? よっしー123 12/6/10(日) 0:53 発言[未読]
【72157】Re:マクロ? 関数式? UO3 12/6/10(日) 18:55 発言[未読]
【72158】Re:マクロ? 関数式? よっしー123 12/6/10(日) 21:41 お礼[未読]

【72137】マクロ? 関数式?
質問  よっしー123  - 12/6/7(木) 13:12 -

引用なし
パスワード
   .HorizontalAlignmentでマクロ?
    .HorizontalAlignment = xlLeftであれば 
+0.5

    .HorizontalAlignment = xlCenterであれば 0

    .HorizontalAlignment = xlRightであれば -0.5
になる式を作りたいのですが、CELLを使えば可能なのでしょうか?

【72138】Re:マクロ? 関数式?
発言  UO3  - 12/6/7(木) 13:42 -

引用なし
パスワード
   ▼よっしー123 さん:

こんにちは

Cell関数では書式情報がとれないと思います。
なので、関数でやるとすれば、カビが生えている(?)Excel4マクロをひっぱりだします。

1.A1 を選択して、名前の定義
2.名前は、GetH にでもしておきましょう。
3.名前定義のダイアログの一番下、参照範囲のところに =GET.CELL(8,Sheet1!A1)+NOW()*0
  これで登録しておきます。
4.で、調べたいセルに
  =IF(GetH=3,0,IF(GetH=4,-0.5,""))
  真ん中と右以外は空白にしています。
  ちなみに、GET.CELL(8,・・・) の 8 は セルの配置位置を取得する番号です。
  戻り値としては

  1 標準 2 左詰 3 中央 4 右詰 5 フル 6 均等 7 選択範囲で中央

  こうなります。

難点があります。

いつ、MSがサポートを打ち切るか?
まぁ、10年ぐらいは大丈夫でしょうけど、それよりも
この式で 0 や -5 (あるいは空白)が表示されますけど、そのあと書式を変更しただけでは
再計算されません。(シート上のどこかのセルの値が変更された時点で再計算が行われます。)

【72139】Re:マクロ? 関数式?
お礼  よっしー123  - 12/6/7(木) 14:58 -

引用なし
パスワード
   早速のレスポンスありがとうございます。

名前の定義を使ったことがなかったので
今 悪戦苦闘中です (^^;)

【72140】Re:マクロ? 関数式?
発言  マルチネス  - 12/6/7(木) 16:22 -

引用なし
パスワード
   >別のサイト(掲示板)にまったく同じ目的の投稿をすることを、一般に「マルチポスト」といいます。
>当質問箱では、マルチポストは原則認めています。
>つまり、ほかのサイトで質問したことをこのサイトで質問してもかまわないということです。

>しかし、もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください。
>そして、仮に他のサイトで解決したのなら、ここにも必ずその顛末を書いてください。
>質問しっぱなし、というのはモラルに反します。
>「解決したからいいや」というのではありません。

>また、マルチポストを明示的に禁止しているサイトとのマルチポストをしてはいけません。

Excel Q&Aサロンはマルチポストを明示的に禁止しています。

【72143】Re:マクロ? 関数式?
回答  よっしー123  - 12/6/7(木) 21:44 -

引用なし
パスワード
   すみません
他のサイトにカキコしたら
VBAのところに行けと・・

そこのサイトは解決済にしろと言っていたので
そうしました。

その為僕的には問題ないと思っていたのですが
これから明示するよう気をつけます。

【72145】Re:マクロ? 関数式?
発言  UO3  - 12/6/7(木) 22:11 -

引用なし
パスワード
   ▼よっしー123 さん:


その後、いかがですか?
VBAの板ですからユーザー定義関数版も。
標準モジュールにかきます。
シート上では
=getHAlg(A1) といったように、確かめるセルを記述します。
関数版は、どこかのセルに入力があれば再計算されましたが、VBA版は
指定のセルの値が変化しない限り、再計算はされません。

Function getHAlg(c As Range) As Variant
  Select Case c.HorizontalAlignment
    Case xlCenter
      getHAlg = 0
    Case xlLeft
      getHAlg = 0.5
    Case Else
      getHAlg = ""
  End Select
End Function

【72147】Re:マクロ? 関数式?
発言  マルチネス  - 12/6/8(金) 9:17 -

引用なし
パスワード
   VBAサロンのほうはマルチとの指摘後、なにも反応がないが、

>そこのサイトは解決済にしろと言っていたので
>そうしました。
ということは別のサイトにもマルチポストをしていてそこは解決済みにしたということなのか?

【72152】Re:マクロ? 関数式?
お礼  よっしー123  - 12/6/9(土) 10:49 -

引用なし
パスワード
   UO3 さん レスありがとうございます。

当にイメージ通りのVBAです。 感謝です!! (^◇^)

ただ、その式を使う為に新たな質問ができたのでそれはまた
違うトピックを作ります。


ありがとうございました。

【72153】Re:マクロ? 関数式?
発言  よっしー123  - 12/6/10(日) 0:53 -

引用なし
パスワード
   UO3 さん
続きで教えていただきたいのですが・・

=(ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4))で
番地を調べてその 書式がどうなっているか判定したいのですが、
上手くいきません

=getHAlg((ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4)))だと
#VALUE!になるのですが 当たり前??

ご指南下さい。

【72157】Re:マクロ? 関数式?
発言  UO3  - 12/6/10(日) 18:55 -

引用なし
パスワード
   ▼よっしー123 さん:

>=getHAlg((ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4)))だと
>#VALUE!になるのですが 当たり前??

こんばんは

私は関数が超苦手なので、的確なお答えができないのですが

アップしたユーザー定義関数を使う記述方式は、たとえば =getHAlg(Q3) です。
一方、セルに =ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4) といった関数をいれますと
確かにセルには Q3 とでます。
しかし、これを、上位の式の引数として、たとえば
=SUM(Q3) はOKですが、セルに =SUM(ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4))
こうしますと 結果が Q3 であっても #VALUE! になりますね。
数式の検証で確認いただくとすぐにおわかりですけど、この場合、実際には
=SUM("Q3") という式が生成されます。
同様に、getHAlg においても =getHAlg("Q3") となり、#VALUE! となるわけです。

じゃぁ、どうしたらいいのか、↑で申し上げたとおり、私は関数音痴なんですが
=GETHALG(INDIRECT(ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4)))
このように INDIRECTを絡ませればいいのではないでしょうか?

【72158】Re:マクロ? 関数式?
お礼  よっしー123  - 12/6/10(日) 21:41 -

引用なし
パスワード
   >じゃぁ、どうしたらいいのか、↑で申し上げたとおり、私は関数音痴なんですが
>=GETHALG(INDIRECT(ADDRESS(3,MATCH(AD3,B3:Z3,0)+1,4)))
>このように INDIRECTを絡ませればいいのではないでしょうか?


ありがとうございます
INDIRECTをかませば まったくの問題がなかったです。
まだまだ知らない関数があります・・・反省

これば調べれば分かる事でした (^_^;)


本当にありがとうございました。

1754 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free