[[20170614225732]] 『表の中で交差した個所に1を加算したいです。』(Please) ページの最後に飛ぶ

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

 

『表の中で交差した個所に1を加算したいです。』(Please)

よろしくお願いします。

■ 0 1 2 3 4 5 6 7 8 9
0
1
2
3
4
5
6
7
8
9

このように10×10の表があるのですが、列と行が交差した場所に1を加算したいです。現在、表は(A5:K15)にあります。

セルで言うなら、今は、8の行とIの列の交差個所です。

■0 1 2 3 4 5 6 7 8 9
0
1
2           ●  
3
4               
5
6
7
8
9

この●のセルに1を自動加算したいです。
行と列の抽出数字は毎回変わります。

現在はB1のセルに7。
B2のセルに2が入っています。

それぞれの値と一致すると列と行に色をつける設定にしてあります。
つまりは色のついたセルの交差するにセルに1を足したいということです。

わかりづらくて申し訳ありませんが、よろしくお願い致します。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


 >つまりは色のついたセルの交差するにセルに1を足したいということです。 

 「足す」と言うのがちょっと分かりません。

  単に「1」を表示するのとは違うんですか?
  それ以前が「8」となっていたら「9」にするって事なんですか?

 本当に足すんだとしたら、どのタイミング(人が何をした時)で足すんですか?

(半平太) 2017/06/14(水) 23:50


半平太様。
ご連絡ありがとうございます。

すでに表の中に数字が入っているので、「足す」という表現にしてしまいました。

その通りで「8」が入っていたら、1加算して「9」にするということです。

タイミングはA1とA2に数字が入った時です。
そこから数字を引っ張ってきています。

■0 1 2 3 4 5 6 「7」 8 9
0
1
「2」           ●  
3
4               
5
6
7
8
9

「」が色のついた部分だとします。
A1=7になると色がつく。
A2=2になると色がつく。

ここで上のように交差します。

よろしくお願いします。
(Please) 2017/06/15(木) 00:22


 >現在はB1のセルに7。 
 >B2のセルに2が入っています。

 >タイミングはA1とA2に数字が入った時です。 
 >そこから数字を引っ張ってきています。 

 上の2つの関係が矛盾する気がするので、下の方だけで考えてみます。

   A1に7が入っただけでは、何もしない。
     A2に2と入ったら、7-2に「1」加算をする。

     その後、A1に9と入れても、何もしない。
     その後、A2に3と入れると、9-3に「1」加算する

     その後、A1には触れないで、
     直ぐA2に5と入れると、9-5に「1」加算する

 以上の動作でよければ、
  当該シートを右クリックして、「コードの表示(V)」を選択し、
  画面中央の白いエリア(シートモジュール)に後記のコードを貼り付け、
  ALTキー + F11キーでエクセルに戻る

 以上で上述の動作をします。
 ただし、数字の入力ミスをした時に必須となる「訂正」は考慮して居りません。

 ’シートモジュールに貼り付けるマクロ

 Private Sub Worksheet_Change(ByVal Target As Range)
    Const Gauge As String = "0123456789"

    With Target
        If .Address = "$A$2" Then
            If Len(.Value) = 1 And InStr(Gauge, .Value) Then

                With Cells(Target.Value + 6, .Offset(-1).Value + 2)
                    Application.EnableEvents = False
                      .Value = .Value + 1
                    Application.EnableEvents = True
                End With

            End If
        End If
    End With
 End Sub

(半平太) 2017/06/15(木) 09:19


半平太様。
ご連絡ありがとうございます。

マクロを試しましたが動きませんでした。
少し表を簡単に致します。


 |A   B    C  D

1|2 {今日}
2|1
3|
4|     A1の値が入る。
5|A2の値  0  1 2
6|0   5  8 7
7|1   4  6 3
8|2   5  4 7

↑セルの範囲はA1:D8までです。

この場合だとA1セルが2ですで、D4セルも「2」が入ります。するとD5に色がつきます。
(重複で色がつく設定にしてあります)

A2のセルが1ですので、A5セルに「1」が入ります。
するとA7に色がつきます。

ですので、色のついた2と1、セルで言うなら、D5とA7が交差するD7セル「3」に1を足す。
よってD7のセルが「4」になるということです。

そして、今日というボタンがあってそれをクリックすると、
A2の値がA1に移動します。


 |A   B    C  D

1|1 {今日}
2|●

そして●に今日の分の数字を入れます、例を2とします。


 |A   B    C  D

1|1 {今日}
2|2
3|
4|     A1の値が入る。
5|A2の値  0  「1」 2
6|0   5  8 7
7|1   4  6 4→昨日分で4になってる。
8|「2」  5  4 7

ですので、C5とA8の交差するC8セル、4に1を足して5にする、ということです。

上手く伝わるかはわかりませんが、よろしくお願い致します。

すみません、投稿したら、レイアウトが崩れてしまいました。

(Please) 2017/06/15(木) 18:03


 >マクロを試しましたが動きませんでした。

 そうですか。済みませんでした。 

 私にはちょっと荷が重いので、他の回答者のレスつ付くまで
 しばらくお待ちいただくようお願いいたします。m(__)m

(半平太) 2017/06/15(木) 19:00


半平太様。

 > そうですか。済みませんでした。

いえいえ、とんでもないです。
わざわざコードまで書いていただきありがとうございます。

私としても、文字では上手く説明できずに申し訳ありませんでした。

そもそも自分にスキルがないために、今のような処理をしています。
現在「00」〜「99」の100個の数字があって、その日に出た数字の翌日にどんな数字が出るのかの統計を取って抽出しています。
それがあの表なのですが、もっと簡単にできる処理はないでしょか?
関数でもマクロでもVBでも結構です。

私のスキルは初級の中程度で、自分の頭では思いつきません、
ご教授いただけたら幸いです。
よろしくお願い致します。

(Please) 2017/06/15(木) 19:32


こんな感じのマクロではだめですか。

ボタンをクリックしたら

1)A1とA2のセル値で指定されたセルの値に+1する
2)A2の値をA1にコピーする
3)A2の値をクリアする

間違えて実行しても元に戻せませんが。

(マナ) 2017/06/15(木) 19:35


マナ様。
ご連絡ありがとうございます。

>指定されたセル←この位置が毎回変わる場合はどうすればいいのでしょうか?

>間違えて実行しても元に戻せませんが。
これに関しては後回しにしたいと思います。

よろしくお願いします。
(Please) 2017/06/15(木) 20:00


例えば、こんな感じで

 Option Explicit

 Sub test()
    Dim tbl As Range
    Dim x As Long, y As Long

    Set tbl = Range("B6:D8")
    x = Range("A1").Value
    y = Range("A2").Value

    tbl(1).Offset(y, x).Select

 End Sub 

(マナ) 2017/06/15(木) 20:20


マナ様。
ご連絡ありがとうございます。

マクロを実行してみました、成功しました。
また表の範囲を広げてみても成功しました。
色をつけなくてもA1とA2で抽出した数字の交差部分を選択できています。

この選択されたセルに1を加算するには、どんなコードが必要でしょうか?
よろしくお願い致します。

(Please) 2017/06/15(木) 20:52


マナ様。

tbl(1).Offset(y, x) = tbl(1).Offset(y, x) + 1
を追加することで、できました。
ありがとうございます。

(Please) 2017/06/15(木) 21:23


それでよいです。
1点だけ補足。

>また表の範囲を広げてみても成功しました。

大切なのは、表の左上のセルだけで
そこから右にx個、下にy個移動したセルを求めています。
なので、本当は表の範囲を指定する必要はないです。

 Option Explicit

 Sub test2()
    Dim 左上セル As Range
    Dim 右方向 As Long, 下方向 As Long

    Set 左上セル = Range("B6")
    右方向 = Range("A1").Value
    下方向 = Range("A2").Value

    With 左上セル.Offset(右方向, 下方向)
        .Value = .Value + 1
    End With

 End Sub

(マナ) 2017/06/15(木) 21:33


マナ様。
ご連絡ありがとうございます。

>大切なのは、表の左上のセルだけで
そこから右にx個、下にy個移動したセルを求めています。
なので、本当は表の範囲を指定する必要はないです。

なんとなくわかりました。
コードまで、ありがとうございます。
やりたいことができるようになりました。
また何かの時にはよろしくお願い致します。

無事解決しましたので、この件はこれで終了させていただきたいと思います。
お知恵を貸して下さった皆様も、ありがとうございます。

(Please) 2017/06/15(木) 22:13


コメント返信:

[ 一覧(最新更新順) ]


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