• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB2005 初心者です。)

VB2005初心者の作品番号振りなおし方法

このQ&Aのポイント
  • VB2005初心者の方ですが、文章中の番号を振りなおしたい場合の方法について教えてください。
  • 具体的なコードを提示していただけると助かります。
  • 作品番号は2桁や3桁になることもあり、全角の数字にしたいとのことです。

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

  • ベストアンサー
回答No.1

'良く解らんものを書いてしまった。 Imports System.Text.RegularExpressions Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a As String = "【作品番号1】【作品番号5】【作品番号9】【作品番号B】【作品番号-2】【作品番号4】【作品番号1】【作品番号P】【作品番号D】【作品番号Q】【作品番号N】" 'a = TextBox1.Text Dim b As Integer = 0 MessageBox.Show(a.Length.ToString) Dim MatchObj As Match = Regex.Match(a, "【作品番号.*?】") Dim index As Integer = 0 Do While MatchObj.Success = True a = a.Substring(0, MatchObj.Index - b) & "【作品番号" & StrConv(i.ToString, VbStrConv.Wide) & "】" & a.Substring(MatchObj.Index + MatchObj.Length - b) b = b + MatchObj.Length - 6 - Convert.ToInt32(Math.Floor(Math.Log10(i))) - 1 MatchObj = MatchObj.NextMatch Loop MessageBox.Show(a) End Sub End Class

mad_ay
質問者

お礼

回答ありがとうございます。お礼がおそくなり大変申し訳ありません。 私にはまだ分からないところがたくさんあって理解しきれないのですが、 >b = b + MatchObj.Length - 6 - Convert.ToInt32(Math.Floor(Math.Log10(i))) - 1 ここのiが指定されていなくてエラーになりました。 あと、上のほうの"【作品番号1】【作品番号5】【作品番号9】【作品番号B】・・・というのはなにを表しているのでしょうか? もしよろしければ教えていただきたいです。

その他の回答 (2)

回答No.3

'ん? '確かに宣言部で 'Dim Index As Integer = 1 'にしないとエラーが出たが、正常動作しているぞ、こっちでは。 Imports System.Text.RegularExpressions Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a As String = "【作品番号1】【作品番号5】【作品番号9】【作品番号B】【作品番号-2】【作品番号4】【作品番号1】【作品番号P】【作品番号D】【作品番号Q】【作品番号N】" 'a = TextBox1.Text Dim b As Integer = 0 Dim MatchObj As Match = Regex.Match(a, "【作品番号.*?】") Dim index As Integer = 1 Do While MatchObj.Success = True a = a.Substring(0, MatchObj.Index - b) & "【作品番号" & StrConv(index.ToString, VbStrConv.Wide) & "】" & a.Substring(MatchObj.Index + MatchObj.Length - b) b = b + MatchObj.Length - 6 - Convert.ToInt32(Math.Floor(Math.Log10(index))) - 1 MatchObj = MatchObj.NextMatch index = index + 1 Loop System.Windows.Forms.MessageBox.Show(a) End Sub End Class

mad_ay
質問者

お礼

できました!!こんな初心者の私に最後まで親切に教えていただいて本当にありがとうございます!!きちんと数字が並んで感動しました☆ 自分でどれだけ考えても分からなかったので、すっごく助かりました。 ありがとうございました!

回答No.2

>ここのiが指定されていなくてエラーになりました。 あ。元々For文で書いていたのを削除しちゃったからですね(汗 全部iをindexに変えて Loop前にindex = index + 1かな?多分(汗 >"【作品番号1】【作品番号5】【作品番号9】【作品番号B】・・・" というのはなにを表しているのでしょうか? プログラムが正しく動くかどうか確認するためのテストデータです。 実際に使う時には 変数にTextbox1.textなどの値を格納してください。 番号が順番にそろいます 【作品番号K】aaa【作品番号N】 とかも 【作品番号2】aaa【作品番号3】 とかになってくれます

mad_ay
質問者

お礼

回答ありがとうございます。 Loop前にindex = index + 1 を入れて、【作品番号1】【作品番号5】・・・を Textbox1.text にしました。 そして間のMessageBox.Show(a.Length.ToString)を消して、 最後のMessagebox.Show(a)をTextbox1.text=a にしました。 エラーはでないのですが、すべてが【作品番号1】になっていしまいました。 ここまでできたこと自体嬉しいのですが、原因が分かれば教えていただきたいです。 長期に渡り回答していただき本当に感謝しています。ありがとうございます。

関連するQ&A