[[20050602111706]] 『条件付き表示形式』(ごりら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件付き表示形式』(ごりら)
  
    A           B          C            D
   顧客    金額    数量    総額
   ABC         \ 500       1,000      \ 500,000
     XYZ         $ 3.05       500       $ 1,525
     LMN         \ 625        700       \ 437,500
     ABC         \ 400        100       \ 40,000

以上のような表で、顧客の名前によってB欄の金額単位が変わるといったような形をとりたいのです。単位の表示は$、\、ユーロのいずれかです。また、D欄の数式がD2=B*Cなのですが、同じく表示形式をB欄の単位に沿って通貨表示したいのです。こんなこと出来るのでしょうか?教えてください。よろしくお願い致します。


 多分、自動で表示形式の変更をするのはVBAでないと難しいと思います。
結果が文字列でもよければ、TEXT関数を使えばできますが。
(kenbou)

なるほど。初心者の私には難しそうですね。しかしもしよろしければ、理解は難しいと思いますが、そのまま教えて頂ければ助かります。ちなみに、実際は上記左からC欄、J欄、G欄、L欄となっております。いかがでしょうか?(ごりら)

 VBAならシートモジュールに
 Private Sub Worksheet_Change(ByVal Target As Range)
     With Target
         If .Count > 1 Then Exit Sub
         If .Column <> 1 Then Exit Sub

         Select Case .Value
             Case "ABC", "LMN"
                 .Offset(, 1).NumberFormatLocal = "\#,##0;-\#,##0"
                 .Offset(, 3).NumberFormatLocal = "\#,##0;-\#,##0"
             Case "XYZ"
                 .Offset(, 1).NumberFormatLocal = "$#,##0.00;-$#,##0.00"
                 .Offset(, 3).NumberFormatLocal = "$#,##0.00;-$#,##0.00"
         End Select
     End With
 End Sub

 こんな感じで出来ます。(範囲は上の表としています。)
(kenbou)

 条件付書式では無理なので、作業列を使ってむりやり作ってみました。
 金額欄と総額欄は文字列になるので、右揃えにして体裁を整えてください。

       C         D        E         F       G      H   I      J
 1    顧客     入力      金額       数量      総額           顧客   単位
 2    ABC       500      \ 500     1,000    \ 500,000         XYZ    $
 3    XYZ      3.05     $ 3.05       500    $ 1525.00         DDZ    €
 4    DDZ       1.5     € 1.50       800    € 1200.00

 D列を作業列として使い、実際の入力はここで行ないます。
 I2:J10の範囲に、\以外の単位を使う顧客名と単位のリストを作っておきます。

 E2に、=IF(ISNA(LOOKUP(C2,$I$2:$I$10)),TEXT(D2,"\ #,###"),TEXT(D2,VLOOKUP(C2,$I$2:$J$10,2,FALSE)&" 0.00"))
 G2に、=IF(ISNA(LOOKUP(C2,$I$2:$I$10)),TEXT(D2*F2,"\ #,###"),TEXT(D2*F2,VLOOKUP(C2,$I$2:$J$10,2,FALSE)&" 0.00"))

 として、下にコピーするとこのようになります。
 (sato)

kenbouさん、satoさんご指導ありがとうございます。ちなみにVBAでチャレンジしていますが、ちょっと理解できないものですから応用がききません。下記の条件で教えて頂けませんでしょうか。お手数ですが、よろしくお願いします。(ごりら)
     C           G          I            K
   顧客    数量    単価    総額
   ABC         1,000       \ 500       \ 500,000
     XYZ         500         $ 3.05      $ 1,525
     LMN         700         \ 625       \ 437,500
     ABC         100         \ 400       \ 40,000

 If .Column <> 1 Then Exit SubをIf .Column <> 3 Then Exit Sub
に変更。各OFFSETを
.Offset(, 1).NumberFormatLocal = "\#,##0;-\#,##0"
.Offset(, 3).NumberFormatLocal = "\#,##0;-\#,##0"
.Offset(, 1).NumberFormatLocal = "$#,##0.00;-$#,##0.00"
.Offset(, 3).NumberFormatLocal = "$#,##0.00;-$#,##0.00"
                      ↓
.Offset(, 6).NumberFormatLocal = "\#,##0;-\#,##0"
.Offset(, 8).NumberFormatLocal = "\#,##0;-\#,##0"
.Offset(, 6).NumberFormatLocal = "$#,##0.00;-$#,##0.00"
.Offset(, 8).NumberFormatLocal = "$#,##0.00;-$#,##0.00"
と変更でどうでしょう。
(kenbou)

kenbouさんありがとうございます。今試してみたのですが、下記のようにエラーがでました。
   コンパイル エラー
   名前が適切ではありません:Worksheet_Change
もしかして、同じワークシートに別の式(?)が入ってるのが関係あるのでしょうか?以前教えてもらったものを使用しています。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim colr As Integer
    If Target.Count > 1 Then Exit Sub
    If Target.Column <> 8 Then Exit Sub
            Select Case Target.Value
                Case "RED"
                    colr = 3
                Case "GOLD"
                    colr = 44
                Case "GREEN"
                    colr = 10
                Case "YELLOW"
                    colr = 6
                Case "BLACK"
                    colr = 1
                Case "BLUE"
                    colr = 5
                Case "CLEAR"
                    colr = 24
                Case Else
                    colr = xlNone
            End Select
            Target.Font.ColorIndex = colr
End Sub
いうものが入っています。その下に先ほど教わったものを入れてみたのですが、だめでしょうか?また、エラーの原因があっているば、どのように改善したらよいでしょうか、ご指導ください。(ごりら)

 同じイベントが2つは1つもモジュールには無理です。
まとめる必要があります。
ご自分で少しチャレンジしてみてください。
(kenbou)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.