
dim tbl(20) as string
として、2桁の数字を保存しています。
(同じ数字は存在しません)
一度フル(21個)に格納したあと、条件を与えて合致する数字を" "で置き換え、消し込んでいきます。
(コレは先ほど教えていただいたので出来ます。)
例えば、
1214152926323338,,,,,, で、「15」を与えた場合、
結果を、
1214 2926323338,,,,,, と。
ここからが質問です。
この配列にあと何個の数字(1個は2桁)が残っているかカウントしたいのです。
例えば、3個消し込みされていれば18となります。
(21-3という計算はやりたくなく、配列の数字部分をカウントしたいのです。)
宜しくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
こんにちは。
全体として何をやりたいのか示した方が、
最適な解法を最短手数で獲得できるように思います。
ちょっと想像を働かせて、配列変数の扱い方について
4パターンほど挙げておきます。
それぞれ異なるロケーションで扱うことの比較的多い手法です。
http://oshiete.goo.ne.jp/qa/8773557.html
と、ここと、2つ並べて質問を読む限り、
どれもありそうで、どれでもないのかも、といった感じですが、、、。
Application.Substitute() メソッド
と、受け皿としてのVariant型変数
Join()関数
UBound()関数
Filter()関数
動的配列の扱い
等、自信無さそうな所はお浚いしておいてください。
特に解説はしませんが、そのまま動作を確認し易いように書いてます。
一段だけインデントしてある行が今回の主題に関わる部分です。
(他の行は殆どテスト用のダミーです)
' /// 「必ず2桁」の数字文字列なら、、、
Sub Re8774264_()
Dim vRtn ' ★ 検索した文字列を消去した配列を格納するVariant型変数
Dim arrS(20) As String
Dim msg As String
Dim i As Long
For i = 0 To 20
arrS(i) = CStr(Int(13 + 5 * Rnd))
Next i
msg = "配列{" & Join(arrS(), ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrS) + 1 & vbLf & vbLf
msg = msg & "消す文字: """ & "15" & """" & vbLf & vbLf
vRtn = Application.Substitute(arrS(), "15", "") ' ★ 検索した文字列を消去した配列をVariant型変数に格納
msg = msg & "配列{" & Join(vRtn, ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrS) + 1 & vbLf & vbLf
msg = msg & "空白を除いた要素の数: " & Len(Join(vRtn, "")) / 2 ' ★ 連結した文字列の長さで数を求める
MsgBox msg
End Sub
' ///
Sub Re8774264_2()
Dim arrS(20) As String
Dim msg As String
Dim i As Long
For i = 0 To 20
arrS(i) = CStr(Int(13 + 5 * Rnd))
Next i
msg = "配列{" & Join(arrS(), ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrS) + 1 & vbLf & vbLf
msg = msg & "消す文字: """ & "15" & """" & vbLf & vbLf
msg = msg & "残り要素数: " & UBound(Filter(arrS(), "15", False)) + 1 ' ★ 要素ごと消した場合をシュミレートした ★ 数
MsgBox msg
End Sub
' ///
Sub Re8774264_3()
Dim arrS() As String ' ★ 動的配列
Dim msg As String
Dim i As Long
ReDim arrS(20) As String ' ★ 動的配列をリサイズ
For i = 0 To 20
arrS(i) = CStr(Int(13 + 5 * Rnd))
Next i
msg = "配列{" & Join(arrS(), ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrS) + 1 & vbLf & vbLf
msg = msg & "消す文字: """ & "15" & """" & vbLf & vbLf
arrS() = Filter(arrS(), "15", False) ' ★ 要素ごと消した(配列リサイズした)ものを元の変数に格納
msg = msg & "配列{" & Join(arrS(), ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrS()) + 1 ' ★ 数
MsgBox msg
End Sub
' ///
Sub Re8774264_4()
Dim arrS(20) As String
Dim arrD() As String ' ★ 要素ごと消した(リサイズした)配列を格納する動的配列変数
Dim msg As String
Dim i As Long
For i = 0 To 20
arrS(i) = CStr(Int(13 + 5 * Rnd))
Next i
msg = "配列{" & Join(arrS(), ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrS) + 1 & vbLf & vbLf
msg = msg & "消す文字: """ & "15" & """" & vbLf & vbLf
arrD() = Filter(arrS(), "15", False) ' ★ 要素ごと消した(配列リサイズした)ものを動的配列変数に格納
msg = msg & "配列{" & Join(arrD, ",") & "}" & vbLf
msg = msg & " 要素数: " & UBound(arrD) + 1 ' ★ 数
MsgBox msg
End Sub
この回答への補足
お二方にベストを差し上げないといけないのですが、
それがかなわないので、
ベストアンサーは無しとさせてください。
申し訳在りません。
大変お世話になりました。
早速有り難うございました。
お示しいただいた4個のパタン、
(当然でしょうが)
全て綺麗な結果が出ています。
あとは、これにどのパタンを当てはめるかですが、
問題なくできると思います。
> Application.Substitute() メソッド
> と、受け皿としてのVariant型変数
> Join()関数
> UBound()関数
> Filter()関数
> 動的配列の扱い
>等、自信無さそうな所はお浚いしておいてください。
ここで知っていたのは、「UBound」位です。
全てのパタンが理解できるよう勉強します。
今回の質問以上のことが学べそうです。
お世話になりました。
No.1
- 回答日時:
「前の質問」がわからず、なぜtbl()かが文字列になってるのか疑問ですが。
Joinで文字列で文字列にしている前提で。
Len(またはLenB)で文字数取得しカンマ除いて2で割る?
要素が必ず2桁の数字/空文字なら、JOIN時にセパレータも空文字にしておけば
配素数 = Len( Join( tbl(), ”” ) ) / 2
ですね
この回答への補足
お二方にベストを差し上げないといけないのですが、
それがかなわないので、
ベストアンサーは無しとさせてください。
申し訳在りません。
大変お世話になりました。
早速有り難うございました。
色々考えさせてしまい申し訳在りませんでしたが、
結果は完璧でした。
お示しいただいた式(コード)で綺麗に獲得できました。
今現在は、とにかくやってみたら出来た、という状況なので
あとで勉強してきます。
お世話になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Java Java 南京錠 2 2023/02/04 11:46
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 以下のVBAで該当文字列の前後に付与したい。 例 前に付与 abc ユーザーID 12345 後に付 3 2022/04/19 21:50
- Excel(エクセル) countif関数について質問 4 2022/06/14 12:11
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
(漢和辞典)部首の配列法は?
-
IF関数でEmpty値を設定する方法。
-
C#の質問
-
シート上のオプションボタン、...
-
複数のテキストボックスに同じ...
-
VB.net(2005)での配列の要素数...
-
ランダムに並んでるキーボード...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
ラジオボタンのチェックをEnter...
-
【MFC】GetCount()とGetSize()...
-
C言語 重複しない4ケタの乱数...
-
パソコンキーボードで時分秒を...
-
配列のメリットは?
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
javaの掲示板について
-
偶数ビットだけと奇数ビットだ...
-
オブジェクトの中のプロパティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
パソコンキーボードで時分秒を...
-
変数を動的に作るには?
-
VBでbyte配列型のインスタンス...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
ラジオボタンのチェックをEnter...
-
C言語 重複しない4ケタの乱数...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
Visual C++ でコントロールを...
-
C++、クラスメンバの構造体配列...
-
遅延バインディングを使用でき...
-
int型配列の一括初期化
おすすめ情報