[[20170608095327]] 『マクロの組み方が分からないので助けてください・』(ミカン) ページの最後に飛ぶ

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

 

『マクロの組み方が分からないので助けてください・・・』(ミカン)

はじめまして
マクロを使いたいのですがどうして良いか分からず質問させていただきました。

sheet1

  A  B  C  D   E
1
2 □ リンゴ ミカン ( )
3

sheet2

    A    B    C    D    E
1    2 リンゴ  
2    1 ミカン
3    3 メロン
4    5 リンゴ

sheet2のB列にリンゴ・ミカン・メロン・カボス等と品種が入力されます。
sheet1のA1はチェックボックスでsheet2のB1〜B3に文字が入力された段階でチェックオンになるように

sheet2のB列が上記の様に入力された場合は
sheet1のB2リンゴを文字にかからないように〇で囲み、B1にはsheet2のA1の値 2を表示
sheet1のC2ミカンを文字にかからないように〇で囲み、C1にはsheet2のA1の値 1を表示
sheet1のD2()の中にメロンを表示し、文字にかからないように〇で囲み、D1にはsheet2のA1の値 3を表示
sheet1のB2リンゴを文字にかからないように〇で囲み、B1にはsheet2のA1の値 5を表示(リンゴが二つあるので2・5と表示したい)

このような動きはマクロで実現可能でしょうか?
よろしくお願いします。

< 使用 Excel:Excel2013、使用 OS:unknown >


 直近の参考過去ログです。

[[20170607091541]] 『入力された値に対して文字を丸で囲みたいです。』(へたっぴ)
(とおりすがり) 2017/06/08(木) 10:03


ミカンさん

幾つか質問させてください。
・A1のチェックボックスは何のために必要なのでしょうか?sheet2のB1〜B3に値がセットされるとチェックが入る、というのはマクロでできると思いますが

・sheet1の文字をまるで囲む、はかなり厳しい気がします。そのセルに色を付ける、ならできますが...
・リンゴの例のようにB1に2・5は、7ではだめですか? または7にして合計している印で数字のセルに色をつけるとか
・全体をどのように動かそうとしていらっしゃるのかご説明願えますか?
さきにsheets2に入力して、そのまとめをsheet1に転記する?

(パオ〜〜ン) 2017/06/08(木) 10:42


チェックボックスは第三者のチェック項目用で必要です。
これはこちらの完成後の運用の形的に欲しいです。

色付けではなく四角で囲むことは可能でしょうか?

B1の2・5の部分は種別判別の為ですので7になってしまうと困ります。

運用の仕方ですがおっしゃられるようにsheet2に入力させたものをsheet1に反映させたいと
思っております。

よろしくお願いします。
(ミカン) 2017/06/08(木) 14:10


ミカンさん

色付けでなく四角で囲むというのが、図形をイメージされているのなら、すみません。
私の手には負えません。

罫線で囲むのなら可能だと思います。
ただ、sheet2からsheet1に転記したものを全て囲むことにどれほどの意味があるのか...
理解しかねています。

とりあえず、転記だけなら以下のマクロで可能だと思います。動作がおかしかったらお知らせください。

Option Explicit
Sub Sample()

    Dim S1 As Worksheet
    Dim S2 As Worksheet
    Dim I As Long, J As Long, JMx As Long
    Dim Flg As Boolean

    Set S1 = Sheets("sheet1")                   'sheet1 を S1 と表します
    Set S2 = Sheets("sheet2")                   'sheet2 を S2 と表します

    JMx = 2
    For I = 1 To S2.Range("B" & Rows.Count).End(xlUp).Row   'Iを1から1づつ増やして、sheet2のB列の最大数まで繰り返す。
        For J = 2 To JMx                                    'Jを2からJMxまで1つづ増やして繰り返す
            Flg = 0                                         'Flgに0をセット
            If S1.Cells(2, J).Value = S2.Cells(I, 2).Value Then         'sheet1の2行目J列(2列目〜)とsheet2のI行目B列を比較して
                Flg = 1                                     'Flgに1をセット
                Exit For                                    'For J=〜のループを抜け出す(Hext Jの次の文を実行する)
            End If
        Next J
        If Flg = 0 Then                                     'Flg=0なら  (初めて書き込む果物なら)
            J = J - 1                                       'Jを1引いて
            S1.Cells(2, J).Value = S2.Cells(I, 2).Value     'sheet1の2行J列目にsheet2のI行2列めの値を入れる
            S1.Cells(1, J).Value = S2.Cells(I, 1).Value     'sheet1の1行J列目にsheet2のI行1列目の値を入れる
            JMx = JMx + 1                                   'JMxに1を加える
        Else
            S1.Cells(1, J).Value = S1.Cells(1, J).Value & "・" & S2.Cells(I, 1).Value  'sheet1の1行目J列目に”・”を入れて
                                                                                        'sheet2のI行目1列目の値をつなぐ
        End If
    Next I
End Sub

(パオ〜〜ン) 2017/06/08(木) 16:02


返信ありがとうございます。
四角は罫線で大丈夫なので教えていただけませんでしょうか?
あとチェックボックス連動教えていただけませんでしょうか?

よろしくお願いします。
(ミカン) 2017/06/09(金) 12:44


ミカンさん

返事が遅くなり申し訳ありません。

チェックボックス連動とは?  sheet1にチェックボックスを貼り付けておくということではないでしょうか?
それもマクロでというのは、すみません。こちらも私の手には負えません。

Option Explicit
Sub Sample()

    Dim S1 As Worksheet
    Dim S2 As Worksheet
    Dim I As Long, J As Long, JMx As Long
    Dim Flg As Boolean

    Set S1 = Sheets("sheet1")                   'sheet1 を S1 と表します
    Set S2 = Sheets("sheet2")                   'sheet2 を S2 と表します

    JMx = 2
    For I = 1 To S2.Range("B" & Rows.Count).End(xlUp).Row   'Iを1から1づつ増やして、sheet2のB列の最大数まで繰り返す。
        For J = 2 To JMx                                    'Jを2からJMxまで1つづ増やして繰り返す
            Flg = 0                                         'Flgに0をセット
            If S1.Cells(2, J).Value = S2.Cells(I, 2).Value Then         'sheet1の2行目J列(2列目〜)とsheet2のI行目B列を比較して
                Flg = 1                                     'Flgに1をセット
                Exit For                                    'For J=〜のループを抜け出す(Hext Jの次の文を実行する)
            End If
        Next J
        If Flg = 0 Then                                     'Flg=0なら  (初めて書き込む果物なら)
            J = J - 1                                       'Jを1引いて
            S1.Cells(2, J).Value = S2.Cells(I, 2).Value     'sheet1の2行J列目にsheet2のI行2列めの値を入れる
            With S1.Cells(2, J)                             'sheet1の2行目J列目について
                .Borders(xlEdgeLeft).Weight = xlMedium      'セルの左側のMediumで罫線を引く
                    .Borders(xlEdgeTop).Weight = xlMedium   'セルの上側にMediumで罫線を引く
                .Borders(xlEdgeBottom).Weight = xlMedium    'セルの下側にMediumで罫線を引く
                .Borders(xlEdgeRight).Weight = xlMedium     'セルの右側にMediumで罫線を引く
            End With

            S1.Cells(1, J).Value = S2.Cells(I, 1).Value     'sheet1の1行J列目にsheet2のI行1列目の値を入れる
            JMx = JMx + 1                                   'JMxに1を加える
        Else
            S1.Cells(1, J).Value = S1.Cells(1, J).Value & "・" & S2.Cells(I, 1).Value  'sheet1の1行目J列目に”・”を入れて
                                                                                        'sheet2のI行目1列目の値をつなぐ
        End If
    Next I
End Sub

ご期待に添えず申し訳ありません。
(パオ〜〜ン) 2017/06/12(月) 13:41


コメント返信:

[ 一覧(最新更新順) ]


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