入力した値の周りの数字を出力する方法

このQ&Aのポイント
  • 入力した値を中心にして周囲の数字を出力する方法について教えてください。
  • 5×6のセル内にランダムに重複を含んだ数字が格納されており、指定した値の周囲の数字を出力する方法を教えてください。
  • エクセル2010を使用し、5×6のセル内にランダムな数字が重複を含んで格納されています。特定の入力値に対して、その周囲の数字を出力する方法を教えてください。
回答を見る
  • ベストアンサー

入力した値の周りの数字を出力する方法

どなたかご存知でしたら回答をよろしくお願いします。 【質問】  5×6のセルがあり、その中にはランダムに数字が1つ入っています(重複有り)。  下記の様に入力値1~6に値を入れたら、5×6のセルを検索する。  検索できたら、その数字の周りにある数字を出力ゾーンに出力する。  検索できない場合は何もしない。  ★-------   以下は具体的に入力値1~6を入れた場合の説明です。 ----------★    「入力値1」に08を入れたら、5×6のセルの中の、08の周りにある         05、04、07、19、23、20、21、09を出力ゾーンに出力する。   「入力値2」に41を入れたら、5×6のセルの中の、41の周りにある         38、30、37を出力ゾーンに出力する。   「入力値3」に37を入れたら、5×6のセルの中の、3箇所ある37の周りにある         41、38、30、35、43、39、36、29、18、28を出力ゾーンに出力する。   「入力値4」に29を入れたら、5×6のセルの中の、29の周りにある         24、20、23、15、18、37、35、30を出力ゾーンに出力する。   「入力値5」に03を入れたら、5×6のセルの中の、03の周りにある         01、06、12を出力ゾーンに出力する。   「入力値6」に23を入れたら、5×6のセルの中の、23の周りにある         20、08、19、06、15、18、29、24を出力ゾーンに出力する。     【5×6のセル】   【入力ゾーン】 【出力ゾーン】 05 09 21 25 38 41    入力値1:08  05 04 07 19 23 20 21 09    04 08 20 24 30 37    入力値2:41  38 30 37 07 19 23 29 35 43    入力値3:37  41 38 30 35 43 39 36 29 18 28 01 06 15 18 37 39    入力値4:29  24 20 23 15 18 37 35 30 03 12 17 28 36 37    入力値5:03  01 06 12             入力値6:23  20 08 19 06 15 18 29 24  【備考】   ・使用する数字は1~99迄で、5×6のセルにはその中からランダムに選んだ数字が    重複有りで入っています。   ・使用するエクセルは2010です。 以上、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

変数宣言やエラー処理を行っていない手抜き版です。 A6:F6およびG2:G6が空白である必要が有ります。 Sub Sample()   sDat = ""   '出力先をクリア   Range(Range("I1"), Range("I1").End(xlToRight)).ClearContents   nTarget = Range("G1").Value '入力値   For Each c In Range("A1:F5").Cells     If c.Value = nTarget Then       '範囲内に入力値が見つかったら周囲の値をカンマ区切りの文字列として取得       sDat = sDat & fGet(c.Row, c.Column, nTarget)     End If   Next   '重複の無い「周囲の値」を作る   Set sDic = CreateObject("Scripting.Dictionary")   sDataSplit = Split(sDat, ",")   For i = 0 To UBound(sDataSplit)     sDic(sDataSplit(i)) = 1   Next i   'I1から右に貼り付け   sPasteData = sDic.keys   Range(Range("I1"), Cells(1, 7 + sDic.Count)) = sDic.keys End Sub Function fGet(nRow, nCol, nTarget) As String   nGrow = WorksheetFunction.Max(nRow - 1, 1)   nGCol = WorksheetFunction.Max(nCol - 1, 1)   fGet = ""   '入力値の周囲の値のうち、空や入力値と同一のものを除いてカンマ区切りの文字列化   For Each c In Range(Cells(nGrow, nGCol), Cells(nRow + 1, nCol + 1)).Value     If (IsEmpty(c) = False) And (c <> nTarget) Then       fGet = fGet & c & ","     End If   Next End Function

moguo4649
質問者

お礼

さっそくのご回答いただきありがとうございました。 付けて頂いた結果と同じになりました。 ありがとうございました。

その他の回答 (4)

  • SI299792
  • ベストアンサー率48% (713/1470)
回答No.5

〇【5×6のセル】  ABCDE となっていますが、データは 05 09 21 25 38 41 と6個あります。 〇【6×6のセル】ABCDEF の間違いでは? 〇【入力ゾーン】H 〇【出力ゾーン】JKLMN~Z の間違いかもしれません。 それとも、ランダム数字と入力ゾーンにはスペースがないのですか? 又は、データの方が間違っているのでしょうか。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.4

訂正です。 ANo.3の以下の一行は不要でした(あっても無駄なだけで悪さはしません)。 sPasteData = sDic.keys

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

5×6セルの中に入力値と一致する値が複数隣接して有った場合、「周りにある数字」が重複しますがそれはどうしたいのでしょう? 重複して表示?それとも重複させない? 以下の例で入力値が8だった場合、1,7,13,14,15,8,3,2,2,8,14,15,16,10,4,3と表示したいのか、 1,7,13,14,15,8,3,2,16,10,4 なのか、はたまた入力値と同じ8は除くのか。 1 2 3 4 5 6 7 8 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 どちらにしてもVBAでやる事になりますが良いんでしょうか?

moguo4649
質問者

補足

補足です。 周りの数字が重複したら、重複削除して出力します。

  • SI299792
  • ベストアンサー率48% (713/1470)
回答No.1

どう考えても、マクロでないとできません。 マクロでもいいかどうか、 【5×6のセル】【入力ゾーン】【出力ゾーン】がどの位置にあるのか。(別シートにあるならシート名も)書いて下さい。

moguo4649
質問者

補足

補足です。 【5×6のセル】【入力ゾーン】【出力ゾーン】は全て同じシートにあります。 〇【5×6のセル】  ABCDE 1 2 3 4 5 6 〇【入力ゾーン】  G 1 〇【出力ゾーン】  IJKLMN~Z 1 2 3 4 5 6

関連するQ&A

  • セルの塗りつぶしについて。

    どなたかご存知でしたら回答をよろしくお願いします。 【質問】  5×6のセルがあり、その中にはランダムに数字が1つ入っています(重複有り)。   下記の様に入力値1~6に値を入れたら、5×6のセルを検索する。   検索できたら、その数字のセルを塗り潰し、それ以外にその数字の周りにある数字   も一緒に塗り潰す。検索できない場合は何もしない。尚、塗り潰しの色は全て同じ色とする。  ★-------   以下は具体的に入力値1~6を入れた場合の説明です。 ----------★    「入力値1」に08を入れたら、5×6のセルの中にある、08を塗り潰し、   それ以外に、05、04、07、19、23、20、21、09も塗り潰す。   「入力値2」に41を入れたら、5×6のセルの中にある、41を塗り潰し、   それ以外に、38、30、37も塗り潰す。   「入力値3」に37を入れたら、5×6のセルの中にある、3箇所ある37を塗り潰し、   それ以外に、41、38、30、35、43、39、36、29、18、28も塗り潰す。   「入力値4」に29を入れたら、5×6のセルの中にある29を塗り潰し、   それ以外に、24、20、23、15、18、33、35、30も塗り潰す。   「入力値5」に03を入れたら、5×6のセルの中にある03を塗り潰し、   それ以外に01、06、12も塗り潰す。   「入力値6」に23を入れたら、5×6のセルの中にある23を塗り潰し、   それ以外に20、08、19、06、15、18、29、24も塗り潰す。  【5×6のセル】    【入力ゾーン】 05 09 21 25 38 41    入力値1:08  04 08 20 24 30 37    入力値2:41 07 19 23 29 35 43    入力値3:37 01 06 15 18 37 39    入力値4:29 03 12 17 28 36 37    入力値5:03                 入力値6:23 【備考】   ・使用する数字は1~99迄で、5×6のセルにはその中からランダムに選んだ数字が    重複有りで入っています。   ・使用するエクセルは2010です。 以上、よろしくお願いします。  

  • 検索値と同じ値か、左右の数字と連続数字なら塗潰す。

    どなたかご存知でしたら回答をお願いします。 【質問】 例題の様に5×6マスが4つあり、その中を1~43の数字が重複有りで入っています。  1つ目の5×6マス:A1~F5  2つ目の5×6マス:H1~M5  3つ目の5×6マス:A7~F11  4つ目の5×6マス:H7~M11 使い方としては、  (1)複写数欄と検索値欄それぞれに値を入れます。  (2)複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピーする   (最大:43)。   検索値欄の検索値も1つコピーする。  (3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。   具体的には、   (1)検索値と同じ値を見つけたら、黄色でセルを塗潰す。   (2)検索値の左右が検索値との連続数字なら、検索値とその左右のセルを赤色で塗潰す。 〇例題   A B C D E F  G H I J K L M  1 06 21 23 36 37 43   01 08 16 31 35 41 2 07 12 14 23 26  27   06 10 13 20 31 37 3 09 17 20 29 32  39   02 15 18 30 34 38 4 03 05 13 25 27  40   01 09 25 30 42 43 5 04 11 22 28 35  38   11 16 18 24 29 42 6 7 03 17 27 36 40 41   07 21 22 23 33 37 8 03 04 08 24 26  39   02 03 07 14 18 38 9 10 12 22 32 37  42   05 10 13 28 36 40 10 02 09 25 32 41 42  07 13 22 40 41 42 11 08 14 23 24 30 39  03 29 31 32 33 40 複写数:01 ※最大1~43の数字が入る。 検索値:41 ※最大43個の数字が右に並ぶ。 〇結果  M1、F7:41が黄色で塗潰される。  E10、F10:連続数字(41、42)が赤色で塗潰される。  K10、L10、M10:連続数字(40、41、42)が赤色で塗潰される。 〇注意事項  ・使用するエクセルは2010です。  ・セルの数字は表示上、2桁で表しています。(例:1ではなく01)  ・検索値欄に入力できる数字は最大43個で、1~43迄の数字です。  ・複写数欄に入力できる数字は1~43迄の1つです。 以上、よろしくお願いします。  

  • 重複数字を数えて出力する方法

    どなたたかご存知でしたらご回答宜しくお願い致します。 【質問】  下図の様にA1~E5迄の25個のセルに数字が1~31迄重複して入っています。  重複数字を数えて、4個重複から重複無しまで【重複チェック】に該当する数字  を出力する方法が知りたいです。 【例】       【重複チェック】 07 12 14 18 19   4個重複:7 01 03 07 19 28   3個重複:19 02 03 07 13 31   2個重複:3,14 07 14 19 20 26   重複無し:1,2,12,13,18,20,26,28,31 ◆注意事項  ・2個重複~4個重複のいずれかが0個という事はあり得ます。  ・【例】で書いてある数字は見やすくするため2桁で書いてあります。    (1ではなく、01としてあります。)  ・使用するエクセルは2010です。 以上、よろしくお願いします。

  • Excelのマクロを使って数字を入力したいのですが、方法がわかりません。

    ExcelのG列とI列にランダムに3桁の数字を作成しました(=ROUND(RAND()の数式を使いました)。 あいだのH列には‐(ハイフン)が入力されています。 これらを別のシートの同じ列に形式を“値”と選択してコピーしました。これらの数字をB列に入力したいのです。 具体的には、たとえば、G1セルに265,H1セルに-、I1セルに849と入力されているとしたら、B1セルに265-849と入力されるように設定したいのです。 それぞれの列にはランダムな数字が並んでおり、対応するB列のセルに同様に入力されるように設定したいのですが、方法がわかりません。マクロを使えばよいとのことですが、どなたか詳しく教えてください。 よろしくお願いします。

  • 入力した数字に紐づく数字1、数字2を出力する。

    どなたかご存じでしたら回答をお願いします。 下記のような第1~第5数字に任意で0~14迄 の数字を入力した場合、あらかじめ用意しておいた 第1数字テーブル~第5数字テーブルのKEYと同じ数字の場合、 そのKEYの数字1、数字2を入力値の下に出力する方法が知りたいです。 【入力例】 第1数字 第2数字 第3数字 第4数字  第5数字   5      4     0      7      14 【第1数字テーブル】   KEY  数字1  数字2    0     4     1    1     4     2    2     2     1    3     7     3    4     7     3    5     2     1    6     4     2    7     6     1    8     5     1    9     5     1   10     8     7   11     2     7   12     7     0   13     6     1   14     8     1   【第2数字テーブル】   ※第1テーブルと同じKEY(0~14迄)のテーブルを用意。 【第3数字テーブル】    ※第1テーブルと同じKEY(0~14迄)のテーブルを用意。 【第4数字テーブル】   ※第1テーブルと同じKEY(0~14迄)のテーブルを用意。 【第5数字テーブル】    ※第1テーブルと同じKEY(0~14迄)のテーブルを用意。 【出力結果】 第1数字 第2数字 第3数字 第4数字 第5数字   5      4     0      7     14   <---- 入力値   2      7     4      6      8   <---- 数字1を出力   1      3     1      1      1   <---- 数字2を出力 ●注意事項     1)第1テーブル~第5テーブルのKEYは0~14迄ありますが、       中身である数字1、数字2の値はそれぞれ異なります。     2)第1数字で参照するのは、第1テーブルのみです。       以下、第2数字は第2テーブル、第3数字は第3テーブル、       第4数字は第4テーブル、第5数字は第5テーブルを参照します。     3)使用しているエクセルは2010です。 以上、ご回答よろしくお願いします。       

  • 同じ数字を2個使用している重複行の数字の出力方法2

    いつも大変お世話になっております。 どなたかご存じの方がお見えでしたら回答頂けると幸いです。 【質問】 2019/12/20 22:51に質問No.9692415として 『同じ数字を2個使用している重複行の数字の出力方法』という質問をさせて頂き、 nishi6様から回答を頂きました。 動作としては添付図のとおり5列×20行の数字の中から、2個の数字が重複していたら黄色でセルを塗り潰し、重複する行に重複した行を、実際に重複した2個の数字をH列~AA列に書き出します。)この時の質問から発展して、『同じ数字を2個使用している重複行の数字の出力方法2』が今回の質問です。 具体的には下記2つです。 (1)重複数字1~重複数字10の2列×20行の数字をAB列・AC列に縦に並べた後、昇順に並び変えて重複数字を削除する。 (2)重複数字1~重複数字10の2列×20行の数字をAE列のみに縦に並べた後、  昇順に並び変えて重複数字を削除する。(又は、(1)で重複数字が削除された数字をAE列に1列に並べた後、昇順に並び変えて重複数字を削除する。) 以上、よろしくお願いします。

  • 同じ数字を2個使用している重複行の数字の出力方法

    いつもお世話になっております。 ご存じの方がお見えでしたら回答をよろしくお願い致します。 【質問】  2019/12/08 22:31 に質問No.9687909 として  『同じ数字を3個~4個使用している重複行の塗り潰し2』という質問をさせて  頂き、SI299792様とnishi6様から回答を頂きました。  この時の質問から発展して、『同じ数字を2個使用している重複行の数字の出力  方法』が今回の質問です。添付図のとおり、5列×20行に絞り、2個の数字が  重複していたら黄色でセルを塗り潰し、”重複している行”をG列に書き出す事は  前回の回答から対応できましたが、実際にどの2個の数字が重複しているか塗潰  されたセルでは分かり難い場合があるため、H列~AA列に書き出す方法が知り  たく質問させて頂きます。 以上、よろしくお願いします。

  • 検索値と同じ値か、隣接数字との差が0か1なら塗潰す

    どなたかご存知でしたら回答をお願いします。 【質問】 例題の様に5×6マスが4つあり、その中を1~43の数字が重複有りで入っています。  1つ目の5×6マス:A1~F5  2つ目の5×6マス:H1~M5  3つ目の5×6マス:A7~F11  4つ目の5×6マス:H7~M11 使い方としては、  (1)複写数欄と検索値欄それぞれに値を入れます。  (2)複写数欄の数だけ、上記4つの5×6のセルを1塊りとして下にコピーする   (最大:43)。   検索値欄の検索値も1つコピーする。  (3)コピー後に検索値欄の値でコピーした側の4つの5×6のセル内を検索して塗潰す。   具体的には、   (1)検索値と同じ値を見つけたら、黄色でセルを塗潰す。   (2)検索値と同じ値で隣接する8方向(上、下、左、右、右下、左下、右上、左上)     の数字との差が0か1なら、検索値とそのセルを赤色で塗潰す。 〇例題   A B C D E F  G H I J K L M  1 06 21 23 36 37 43  01 08 16 31 35 41 2 07 12 14 23 32  43   06 10 13 20 27 32 3 09 17 20 29 42  40   02 15 18 30 34 38 4 03 05 13 25 27  41   01 09 25 30 42 43 5 04 11 22 28 35  39   11 16 18 24 29 42 6 7 03 17 27 36 40 41   07 21 22 23 33 37 8 03 04 08 24 26  39   02 03 07 14 18 38 9 10 12 22 32 37  42  05 10 13 40 41 42 10 02 09 25 32 41 42  07 13 22 40 41 42 11 08 14 23 24 30 39  03 29 31 40 41 42 複写数:01 ※最大1~43の数字が入る。 検索値:41 ※最大43個の数字が右に並ぶ。 〇結果  M1:41が黄色で塗潰される。  E3、F3、F4 :40、41、42が赤色で塗潰される。  E7、F7   :40、41が赤色で塗潰される。   F9、E10、F10:41、42、42が赤色で塗潰される。   K9、L9、M9、K10、L10、M10、K11、L11、M11:40、41、42が赤色で塗潰される。 〇注意事項  ・使用するエクセルは2010です。  ・セルの数字は表示上、2桁で表しています。(例:1ではなく01)  ・検索値欄に入力できる数字は最大43個で、1~43迄の数字です。  ・複写数欄に入力できる数字は1~43迄の1つです。 以上、よろしくお願いします。

  • 行の連続数字を見つけて塗潰す方法

    どなたかご存知でしたら回答をよろしくお願いします。 【質問】 下図の様に5×5のセルが4つあり、それぞれ1~99迄の数字がランダムに 重複有りで入っています。5×5のセルの中には行の連続数字(例:02 03) が入っています(1個も無い場合もあります)。 行の連続数字を見つけたら、その連続数字のセルを塗潰す方法が知りたいです。  ・2連続・・・黄色で塗潰す。   ・3連続・・・赤色で塗潰す。  ・4連続・・・青色で塗潰す。  ・5連続・・・緑色で塗潰す。  A B C D E F  G H I J K   1 01 07 09 11 22     03 10 20 30 31 2 04 12 14 15 23     01 02 07 09 22 3 07 13 17 18 25     04 11 12 14 15 4 06 16 21 24 26     02 13 17 18 23 5 08 19 27 28 29     06 16 24 25 26 6 7 05 09 11 26 30     03 06 13 22 27 8 04 10 15 19 24     03 14 25 28 29 9 01 14 20 25 29     05 11 18 20 21 10 07 18 21 23 31     07 08 16 23 31 11 02 08 12 16 17     02 03 12 17 27 【結果】 上記4つある5×5のセルには、10個の重複数字がありその数字のセルが塗潰されます。 (1)14 15  (2)17 18 (3)27 28 29 (4)30 31 (5)14 15 (6)24 25 26 (7)16 17 (8)28 29 (9)07 08 (10)02 03 【注意事項】  ・使用するエクセルは2010です。  ・セルの中の数字は2桁で表しています。(例:1ではなく01)  ・5×5のセルの位置は下記のとおりです。    1個目の5×5マス・・・A1~E5    2個目の5×5マス・・・G1~K5      3個目の5×5マス・・・A7~E11    4個目の5×5マス・・・G7~K11  ・回答はVBでも関数でも構いません。 以上、よろしくお願いします。

  • EXCELで範囲内にある値を検索してA列の値を返す

    タイトル通りなのですが、OSはXPでEXCEL2000を使用しています。 シート内ですが 1.A列には文字列が入っています。200行まで空白は無いです。 1.B列からL列の200行までに数字がランダムに入っています。 2.数字は1~500までです。 3.行によってはL列まですべてのセルに値が入ってません。  数字の入っていないセルは空白です。 4.数字の重複はありません。 やりたいことは 別のシートのA列に1~500までの数字を入れ、B列に上記範囲の中からその数字を検索して、その行のA列の値を返したいのですが、出来ません。 どの関数を組み合わせれば出来るのでしょうか? vlookupの検索範囲は1列だけなのでダメでした。 よろしくお願いします。

専門家に質問してみよう