[[20041101135709]] 『入力値によって、決められた図の表示』(MIU) ページの最後に飛ぶ

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

 

『入力値によって、決められた図の表示』(MIU)

お世話になります。教えてください。

セルA1に、「N」、「X」、「K]、「HK」、「XX」、「KK」、「KKK」の7種類の

文字を入力したときに、各文字に対応した図(JPGファイル、もしくはオートシェイプの
図)を
指定したセル上(例:B1の位置)

に表示させたいのですが、

この時、文字に「1〜15」の倍数がある場合(例:10HK等)は

図も倍数分表示(例:10HK→HKに対応した図を横並びに10個表示)したいのですが、

エクセルでこのような事は可能でしょうか?

[エクセルのバージョン]Excel2003

[OSのバージョン]WindowsXP


 マクロ(VBA)を使えば可能です。

  (INA)


INA様

お返事ありがとうございます。

マクロ(VBA)でのプログラミングになると

作成について全く知識がないので、

大変恐縮ですが、どのようにすれば上記の内容が出来るか

お教えいただけませんでしょうか?

(MIU)


 仕様を明確にする必要があります。

 >各文字に対応した図(JPGファイル、もしくはオートシェイプの図)
 これについて詳しく教えて下さい。

 >この時、文字に「1〜15」の倍数がある場合(例:10HK等)は
 全角文字なのですか?

  (INA)


仕様について、補足させて頂きます。

対応した図は、JPGファイル(ファイル名は、各文字に併せて「n.jpg〜kkk.jpg」)とします。

また、文字・数値とも小文字で半角文字とします。(例:10hk)

この条件で、お願い致します。

(MIU)


 JPGファイル はどこに保存されているものですか?
 Excelのブックと同じフォルダですか?

  (INA)


エクセルのファイルと同じフォルダでお願い致します。
(MIU)


すみません、これは出来たらで良いのですが

倍数が偶数番目の図だけ、左右反転表示っていうのは可能でしょうか?

例えば、「7k」の図を表示するとき、「1、3、5、7番目はそのまま表示で

「2、4、6」番目の図は、左右反転で図を表示することは出来ますか?
(180度回転した状態)

もし、今からでも間に合いましたら補足していただけないでしょうか?

大変申し訳ありませんが、何卒宜しくお願い致します。

(MIU)


 INAさんがお作りになってる間に、左右反転の分だけ・・・。
 エクセル上ではjpgの反転は出来ません。
 フォトエディタなど画像編集ソフトで左右反転した画像をk180などとして、
 条件分岐するようになるんじゃないかな・・・。
 INAさんがどのようなものを作っているのか、o(^-^)oワクワク
 (川野鮎太郎)


無理な注文ばかりしてしまい、大変申し訳ありません。

大変な作業とは思いますが、何卒宜しくお願い致します。

(MIU)


 鮎太郎さんのおっしゃるように、Excelに画像反転の機能がないので
 >左右反転した画像をk180などとして、条件分岐するようになる
 とするのが簡単かと思います。

 >これは出来たらで良いのですが
 とのことなので、当然含まれておりません。

 >どのようなものを作っているのかo(^-^)oワクワク
 たぶん誰が作っても同じような感じだと思いますよ。。(^_^;)

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim myStr() As Variant
 Dim i As Long, c As Long
 Dim col As Long

    If Target.Address(0, 0) <> "A1" Then Exit Sub
    If Target.Value = "" Then Exit Sub

        myStr() = Array("n", "x", "k", "hk", "xx", "kk", "kkk")

    For i = 6 To 0 Step -1
        If InStr(Target.Value, myStr(i)) > 0 Then GoTo next1 '画像の表示へ
    Next i    

        MsgBox "入力文字が正しくありません", vbExclamation, "エラー"
        Exit Sub '終了

 next1: '画像の表示

        If Dir(ThisWorkbook.Path & "\" & myStr(i) & ".jpg") = "" Then
            MsgBox myStr(i) & ".jpg が見つかりません。終了します。", vbExclamation, "エラー"
            Exit Sub
        End If

        Range("B1").Select
        ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
        col = Selection.BottomRightCell.Column

        For c = 2 To Val(Target.Value)
            Cells(1, col + 1).Select
            ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
            col = Selection.BottomRightCell.Column
        Next c

 End Sub 

  (INA)


 INA様

ありがとうございます。

早速、試させていただきます。

マクロでの作成については、知識が無いのですが、INA様に作って頂きましたプログラムを

少しでも理解出来るように努力してみます。

貴重なお時間をいただきまして、本当にありがとうございました。

ちなみに、反転表示の分岐の条件も、宜しければお願い出来ませんでしょうか?

(MIU)


 どうぞ。 

 *反転画像のファイル名は k180.jpg のように 180 を付与してください。

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim myStr() As Variant
 Dim i As Long, c As Long
 Dim col As Long

    If Target.Address(0, 0) <> "A1" Then Exit Sub
    If Target.Value = "" Then Exit Sub

        myStr() = Array("n", "x", "k", "hk", "xx", "kk", "kkk")

    For i = 6 To 0 Step -1
        If InStr(Target.Value, myStr(i)) > 0 Then GoTo next1 '画像の表示へ
    Next i

        MsgBox "入力文字が正しくありません", vbExclamation, "エラー"
        Exit Sub '終了

 next1: '画像の表示

 On Error GoTo ErrTrap

        Range("B1").Select
        ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
        col = Selection.BottomRightCell.Column

        For c = 2 To Val(Target.Value)
            Cells(1, col + 1).Select

            Select Case c Mod 2
            Case 0 '偶数
                ActiveSheet.Pictures.Insert _
                            (ThisWorkbook.Path & "\" & myStr(i) & "180.jpg").Select
            Case Else
                ActiveSheet.Pictures.Insert _
                            (ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
            End Select

            col = Selection.BottomRightCell.Column
        Next c

        Exit Sub '終了

 ErrTrap: 'エラー処理
    MsgBox "画像ファイルが見つかりません。終了します。", vbExclamation, "エラー"
 End Sub

    (INA)


いろいろ注文してしまい、申し訳ありませんでした。

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

上記のプログラムを、そのまま使用するのではなくて

自分なりに理解出来るようにがんばってみます。

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

(MIU)


 >自分なりに理解出来るようにがんばってみます。
 そのように言っていただけると幸いです。
 私は仕様丸投げのマクロ作成依頼はたいてい断っているのですが、
 ちょっとアドバイスしただけで作れる内容のマクロではないですし、
 少し、ひまだったので作らせて頂きました。  
 何か分からないことがあれば、また質問して下さい。  

 [参考サイト]
http://www.sanynet.ne.jp/~awa/excelvba/kouza.html 
http://www6.plala.or.jp/MilkHouse/menu.html
http://t_shun.at.infoseek.co.jp/My_Page/Excel-VBA/vba_menu.htm
http://www.geocities.jp/vbaxl/
   (INA)   


参考サイトありがとうございます。

いきなりマクロを使いこなすのは難しくても、教えて頂いた内容だけでも理解して

自分なりに改良にも挑戦してみようと思います。

(MIU)


先日は、プログラムを作って頂きまして、大変ありがとうございました。

早速ですが、作っていただきましたプログラムを少し改良したいのですが、

条件の考え方までは組み立てが出来たのですが、

いざプログラムとなると、作成の仕方がまだよくわかりません。

大変申し訳ありませんが、次の様な仕様でのプログラム改良についてのご指導お願いできないでしょうか?

(以下、改良ポイントについてと、自分なりに考えてみた条件の組み立てです。)

改良ポイント

・奇数倍の時、中央からの並びをそれまでの逆を表示したい。

例(正規表示を「a」、反転表示を「b」とします。):5K→(a、b、a、b、a)を(a、b、a、a、b)にしたい。

・「n」については、奇数倍の時中央を「x.jpg」を表示し、

中央から左側を全て「n.jpg」右側を「n180.jpg」と表示したい。

例(正規表示を「a」、反転表示を「b」とし、中央を「x」とします。):5n→(a、a、x、b、b)としたい。

考えてみた条件の組み立てですが、

・セルA1に7種類の文字「k」、「hk」、「kk」、「kkk」、「x」、「xx」「n」を入力したときに

各文字に対応するjpgファイル

「k.jpg」、「hk.jpg」、「kk.jpg」、「kkk.jpg」、「x.jpg」、「xx.jpg」「n.jpg」、

及び上記jpgファイルの反転表示の

「k180.jpg」、「hk180.jpg」、「kk180.jpg」、「kkk180.jpg」、「x180.jpg」、「xx180.jpg」「n180.jpg」

をB1に表示をします。ただし、各7種類の文字に倍数1〜15までの整数がある時、

その倍数分jpgファイルを右に向かって並べて表示します。

例:「5hk」は、「hk.jpg」と「hk180.jpg」を条件に合わせて5つ右並びに表示します。

・倍数を「c」として、「c」は1〜15までの整数とします。

(また、条件式中の「c/2」は小数点以下切捨ての整数とします。)

・表示するjpgファイルは、条件によって正規表示・反転表示として

正規表示を「a」、反転表示を「b」とします。

条件1:「k」、「hk」、「kk」、「kkk」、「x」、「xx」「n」について、

	「c」が偶数の時は、cの奇数番目を正規表示「a」、偶数番目を反転表示「b」と表示します。

	例:c=8の時、(a、b、a、b、a、b、a、b)とします。

条件2:「c」が奇数の時は、

		・「k」、「hk」、「kk」、「kkk」、「x」、「xx」については、

		(c/2+1)番目までは、条件1と同じくcの奇数番目を正規表示「a」、偶数番目を反転表示「b」とし、

		(c/2+2)番目からは、cの偶数番目を正規表示「a」、奇数番目を反転表示「b」と表示します。

		例:c=7の時、(a、b、a、b、a、b、a)ではなくて、(a、b、a、b、b、a、b)と表示します。

		・「n」については、

		 (c/2)番目までは全て「a」、

		 (c/2+1)番目は「x.jpg」を表示し、

		  (c/2+2)番目から全て「b」と表示します。

(MIU)


INA 様へ (MIU)

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

作って頂きましたVBAを少し改良したくて(改良ポイントについて上記参考)

、INA様に教えて頂きましたサイトを参考に作成してみたのですが、

エラーが表示されないのに図の表示がされずに困っています。

もし宜しければ、どこが違うかご指導いただけませんでしょうか?

宜しくお願い致します。

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim myStr() As Variant
 Dim i As Long, c
 Dim col As Long

    If Target.Address(0, 0) <> "A1" Then Exit Sub
    If Target.Value = "" Then Exit Sub

        myStr() = Array("n", "x", "k", "hk", "xx", "kk", "kkk")

    For i = 6 To 0 Step -1
        If InStr(Target.Value, myStr(i)) > 0 Then GoTo next1 '画像の表示へ
    Next i

        MsgBox "入力文字が正しくありません", vbExclamation, "エラー"
        Exit Sub '終了

next1: '画像の表示

 On Error GoTo ErrTrap

        Range("B1").Select
        ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
        col = Selection.BottomRightCell.Column

For c = 2 To Val(Target.Value)

            Cells(1, col + 1).Select

Select Case i

    Case Is < 6 '「"x", "k", "hk", "xx", "kk", "kkk"」について

       Select Case c Mod 2 '倍数cについて
        Case 0 '倍数cが偶数の時

            Select Case c Mod 2 '偶数・奇数番を求める
                Case 0 '偶数→反転表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & "180.jpg").Select
                Case Else  '奇数→正規表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
                        col = Selection.BottomRightCell.Column
                End Select

        Case Else '倍数cが奇数のとき

            Select Case c  '奇数の時の並びの条件に当てはめる
                Case Is <= (Val(Target.Value) / 2) + 1  '倍数cが(c/2)+1番目まで
                     Select Case c Mod 2
                        Case 0 '偶数→反転表示
                            ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & "180.jpg").Select
                        Case Else  '奇数→正規表示
                            ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
                            col = Selection.BottomRightCell.Column
                        End Select

                Case Is >= (Val(Target.Value) / 2) + 2  '倍数cが(c/2)+2番目以降
                     Select Case c Mod 2
                        Case 0 '偶数→正規表示
                            ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
                        Case Else '奇数→反転表示
                            ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & "180.jpg").Select
                            col = Selection.BottomRightCell.Column
                        End Select

        End Select

   Case 6  '「"n"」について

       Select Case c Mod 2 '倍数cについて
        Case 0 '倍数cが偶数の時

            Select Case c Mod 2 '偶数・奇数番を求める
                Case 0 '偶数→反転表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & "180.jpg").Select
                Case Else  '奇数→正規表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
                        col = Selection.BottomRightCell.Column
                End Select

        Case Else '倍数cが奇数の時

            Select Case c  '奇数の時の並びの条件に当てはめる
               Case Is <= (Val(Target.Value) / 2)  '倍数cがc/2番目まで、正規表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select

               Case (Val(Target.Value) / 2) + 1  '倍数cが(c/2)+1番目の時、「x.jpg」を表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & "x.jpg").Select

               Case Is >= (Val(Target.Value) / 2) + 2  '倍数cが(c/2)+2番目以降、反転表示
                        ActiveSheet.Pictures.Insert _
                                            (ThisWorkbook.Path & "\" & myStr(i) & "180.jpg").Select
                        col = Selection.BottomRightCell.Column
               End Select

        End Select
   Next c
   End Select
        Exit Sub '終了

ErrTrap: 'エラー処理

    MsgBox "画像ファイルが見つかりません。終了します。", vbExclamation, "エラー"
 End Sub


 すみません見落としていました。時間が空いたら確認させていただきます。

 ちなみに今回のような状況で動作を確認するときは、
 VBEの画面で、ローカルウィンドウを表示しておき、
 F8キーでステップ実行してみて下さい。
  (INA)

お返事ありがとうございます。

昨日、書き込みしてから、なんとかここまで教えてもらったサイトを見ながら

がんばってみたのですが、やはりまだプログラムの意味を全部把握できてないので

プログラムがうまく動作しません。

何卒、宜しくお願い致します。

(MIU)


 すごい頑張ってますね。おどろきました。
 ひとまず作ってみましたが、
 ほとんど動作確認してませんので、不具合があったら言って下さい。

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim myStr() As Variant
 Dim i As Long, c As Long
 Dim col As Long
 Dim myFile As String '画像ファイル名

    If Target.Address(0, 0) <> "A1" Then Exit Sub
    If Target.Value = "" Then Exit Sub

        myStr() = Array("n", "x", "k", "hk", "xx", "kk", "kkk")

    For i = 6 To 0 Step -1
        If InStr(Target.Value, myStr(i)) > 0 Then GoTo next1 '画像の表示へ
    Next i

        MsgBox "入力文字が正しくありません", vbExclamation, "エラー"
        Exit Sub '終了

 next1:  '画像の表示-----------------------------
 On Error GoTo ErrTrap

 '-----1枚目表示------
        Range("B1").Select
        ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myStr(i) & ".jpg").Select
        col = Selection.BottomRightCell.Column

        '1枚のときは終了
        If Val(Target.Value) = 0 Or Val(Target.Value) = 1 Then
            Range("A1").Activate
            Exit Sub
        End If

 '====2枚以上の処理====

        '[奇数で n のとき]
            If Val(Target.Value) Mod 2 = 1 And myStr(i) = "n" Then

                 For c = 2 To Val(Target.Value)
                    Cells(1, col + 1).Select

                        If c = Int(Val(Target.Value) / 2 + 1) Then '中央の画像
                            myFile = "x.jpg"
                        ElseIf c <= Int(Val(Target.Value) / 2) Then '前半の画像
                            myFile = "n.jpg"
                        Else                                        '後半の画像
                            myFile = "n180.jpg"
                        End If

                    '画像挿入
                    ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myFile).Select
                    col = Selection.BottomRightCell.Column
                Next c

       '[奇数のとき]
            ElseIf Val(Target.Value) Mod 2 = 1 Then

                 For c = 2 To Val(Target.Value)
                    Cells(1, col + 1).Select
                        '前半の画像
                        If c <= Int(Val(Target.Value) / 2 + 1) Then
                            Select Case c Mod 2
                            Case 0    '偶数
                                myFile = myStr(i) & "180.jpg"
                            Case Else '奇数
                                myFile = myStr(i) & ".jpg"
                            End Select

                        '後半の画像
                        Else
                            Select Case c Mod 2
                            Case 0    '偶数
                                myFile = myStr(i) & ".jpg"
                            Case Else '奇数
                                myFile = myStr(i) & "180.jpg"
                            End Select
                        End If

                    '画像挿入
                    ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myFile).Select
                    col = Selection.BottomRightCell.Column
                Next c

        '[偶数のとき]
            Else

                For c = 2 To Val(Target.Value)
                    Cells(1, col + 1).Select

                        Select Case c Mod 2
                        Case 0    '偶数
                            myFile = myStr(i) & "180.jpg"
                        Case Else '奇数
                            myFile = myStr(i) & ".jpg"
                        End Select

                     '画像挿入
                    ActiveSheet.Pictures.Insert(ThisWorkbook.Path & "\" & myFile).Select
                    col = Selection.BottomRightCell.Column
                Next c
            End If

      '+++ 終 了 +++
        Range("A1").Activate
        Exit Sub

 'エラー処理----------------------------
 ErrTrap:
    MsgBox "画像ファイルが見つかりません。終了します。", vbExclamation, "エラー"
 End Sub


お返事遅くなってすみませんでした。

試しに使用させてもらいましたが、きちんと動作します。

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

今回作って頂きましたプログラムの内容を理解出来るようにがんばってみます。

宜しければ、またわからない点がでてきたら教えてください。

宜しくお願い致します。

(MIU)


コメント返信:

[ 一覧(最新更新順) ]


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