• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:入力した値の周りの数字を出力する方法)

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

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

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

  • ベストアンサー
  • 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
  • ベストアンサー率47% (773/1617)
回答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
  • ベストアンサー率47% (773/1617)
回答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