• ベストアンサー

文字列の作成

こんばんは aとbとcを使って文字列を作成したいのですがコードが書けません。 困りました。 例 abc bbc cbc aac acc ~~~~~ ccc 全部で27通りだと思います。 出力は配列かリストでお願いします。 for文で書くのかな~~~ 困りましたね~~~~

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

  • ベストアンサー
  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.1

Visual Basicとありますが、結果を表示するにも、エクセルが便利なので、「VBA」(Visual Basic for Applications)で作りました。 鈍くさい、美しくないプログラムですが、分かりやすくはあると思います。 Option Explicit Sub Test() Dim i, j, k, l As Integer Dim x(2), y(2), z(2) As String For i = 0 To 2 x(i) = Chr(97 + i) y(i) = Chr(97 + i) z(i) = Chr(97 + i) Next i l = 0 For i = 0 To 2 For j = 0 To 2 For k = 0 To 2 l = l + 1 Cells(l, 1).Value = x(i) & y(j) & z(k) Next k Next j Next i End Sub 簡単な説明です。 For i = 0 to 2   x(I) = Chr(97+i) は、「Chr(97)」が「a」なので、結果として「i = 0」とのき「a」、「1」のとき「b」、「2」のとき、「c」が入ります。 あとは、単純な組み合わせなので、分かって頂けると思います。

bybalsendercase
質問者

お礼

先日、BPにしたつもりでいましたが、今日もう一度確認したらそのままになっていました。びっくりしました。 それにしても、このコードが書けないようではプログラマー(趣味です)失格ですね。

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 次の様にしますと、For~Nextの繰り返し処理は2重で済みますし、文字列の長さや「文字列を構成する文字の種類の数」が変わっても Const myLength = 3 '求める各文字列の文字数 の所と myChar = Array("a", "b", "c") '求める文字列に使う文字 の所の設定値を変えるだけで良く、それ以外の部分のVBAの構文を変更する事無く使う事が出来ます。 Sub QNo9231486_文字列の作成() Const myLength = 3 '求める各文字列の文字数 Dim i As Long, j As Long, m As Long, n As Long, buf As Long, _ myChar As Variant, myString() As String myChar = Array("a", "b", "c") '求める文字列に使う文字 m = UBound(myChar) + 1 n = m ^ myLength - 1 ReDim myString(n) For i = 0 To n 'myString(i) = myChar(i Mod m) buf = i For j = 1 To myLength myString(i) = myChar(buf Mod m) & myString(i) buf = Int(buf / m) Next j Next i '出力は配列 myString() の最終値になります。 'For i = 0 To n 'Range("A1").Offset(i).Value = myString(i) 'Next i End Sub

bybalsendercase
質問者

お礼

有難う御座いました。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

以下のような感じですかね~~~~ 真似してみました(笑) エクセルVBAだと Sub Example() Dim i As Integer, j As Integer, k As Integer, m As Integer Dim MyStrings() As String, buf As Variant buf = Array("A", "B", "C") m = 0 For i = LBound(buf) To UBound(buf) For j = LBound(buf) To UBound(buf) For k = LBound(buf) To UBound(buf) ReDim Preserve MyStrings(m) MyStrings(m) = buf(i) & buf(j) & buf(k) m = m + 1 Next k Next j Next i Range(Cells(1, "A"), Cells(m, "A")).Value = WorksheetFunction.Transpose(MyStrings) End Sub VBだとButton1_Clickとして Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim i As Integer, j As Integer, k As Integer, m As Integer Dim MyStrings() As String Dim buf() As String = {"A", "B", "C"} m = 0 For i = LBound(buf) To UBound(buf) For j = LBound(buf) To UBound(buf) For k = LBound(buf) To UBound(buf) ReDim Preserve MyStrings(m) MyStrings(m) = buf(i) & buf(j) & buf(k) Debug.Print(MyStrings(m)) m = m + 1 Next k Next j Next i End Sub

bybalsendercase
質問者

お礼

有難う御座います。 先日Prome_Linさんの回答にBPを付けましたが、何故かそのままになっていました。 お手数おかけしました。

関連するQ&A