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

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

VB2005 初心者です。

文書中の番号を振りなおしたいのですが、やり方がよく分かりません。 Dim a As String=textbox1.text Dim b As Integer=a.IndexOf("【作品番号") Dim c As String=a.Substring(b,5) Dim d As Integer=c.Length Do While b <> -1 b=a.Indexof("【作品番号",b+1) d=d+5 Loop Dim f As Integer=Cstr((d-5)/5) Dim g As Integer=0 g=g+1 For h As Integer=1 To f Dim i As String=textbox1.text.Replace("【作品番号","【作品番号" & h & "】") Next 最初のループまでで文章中に【作品番号*】がいくつあるかを調べて、(f回)その回数文だけまたループを回して番号を振りたいのですが、何もおきません。 本当に初心者なので、皆さんが見たらありえない構文かも知れませんが、ご教授願います。。。 ちなみに、作品番号は2桁3桁にもなることもあり、全角の数字にしたいのです。 よろしくお願い致します。

  • mad_ay
  • お礼率99% (171/172)

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

  • ベストアンサー
回答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

  • VB(2008)で文字列の置き換え

    Dim a As String Dim b As String a = TextBox1.Text b = a.Replace("hogehoge", "fuga") b = a.Replace("piyo","xyzzy") b = a.Replace("foo", "bar") Textbox2.Text= b のようにしているのですが、置き換えることができません。 初歩的な内容ですがどなたかよろしくお願いします。

  • VBで倍数を出したい

    VBで倍数を出したい よろしくお願いします。 おそらく基本なんだと思うのですが、さっぱりわかりません。 TextBox Label Buttonと並んでいて、 TextBoxに入った整数に対し、 Buttonを1度押すたびに、 Labelに倍数が表記されていく、 という趣旨なのですが。 まず、前段階として下記を作らされました。 Public Class Form1 Dim i As Integer Dim m As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click i = TextBox1.Text lblmessage.Text = i + m m = lblmessage.Text End Sub End Class このように、labelの数字がどんどん変わっていくのはできたのですが、問題は、 Text…10 Label…10    20    30    40    50    60    70    80    90    100 となり、しかも一度に出るのではなく、Buttonひと押しにつき一つの解が出ね 次の一押しで改行され解が出る。 かつ、100で打ち止めにすること…だそうです。 いちおうめちゃくちゃですが、みんな風に作りました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class どうかヒントだけでもお願いします。

  • VB 繰り返し(ループ)について教えてください

    私は最近プログラムを書く仕事に就いたのですがまったくの初心者でなかなか課題が先に進めずに困っています。もしわかる方いましたら是非教えていただけるとうれしいです。 今わからないのが、繰り返し(ループ)です。 何とか一桁目は完成しましたがこの先がどうやってもうまくいきません。左にTextBox、真ん中にCommand、左にLabelがあり左に整数を入れて真ん中を押すと左に漢数字で表示されるという形で5桁まで出来るようにしたいのです。 今出来ているものをとりあえずはりますので是非教えてください。 Option Explicit Private Sub Command1_Click() Dim a As Integer Dim b As String a = Val(Text1.Text) If a = 0 Then b = "0" ElseIf a = 1 Then b = "一" ElseIf a = 2 Then b = "二" ElseIf a = 3 Then b = "三" ElseIf a = 4 Then b = "四" ElseIf a = 5 Then b = "五" ElseIf a = 6 Then b = "六" ElseIf a = 7 Then b = "七" ElseIf a = 8 Then b = "八" Else b = "九" Label1.Caption = b End Sub

  • VBの添削をお願いします。

    VBの添削をお願いします。 先日 http://okwave.jp/qa/q5919602.html で質問した者です。 (textboxの値の倍数が改行されながら表示されるようにするには?という主旨です。) リンク先にもありますが下記の回答をいただきました。 Public Class Form1 Dim a As Integer Dim b As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim b As Integer = 10 a = TextBox1.Text lblMessage.Text = a & ControlChars.CrLf & a + b End Sub End Class それで今度は下記の問いが出ました。 「表示されるのは最新の5行のみ」 Textbox内が10の場合、「60が表示された時点で10は消え、70が出た時点で20が消える」というものです。 このまま続けてもよし、Labelを5つ並べてもよし、とのことです。 で今回は前者で作ってみました。 lblmessage.textの上にlblmessage2.textを被せて隠しちゃえ、というやつなんですが、 模範解答とは程遠いんでしょうね。。。。 どなたか添削お願いできませんか。

  • vb 配列の再検索について

    こんばんは、 vbで悩んでいます。  配列の検索で、みつかったら、行と位置を出力する でた結果の次の行から 再検索する ということをしたいのですが。 一回目の検索はできるのですが、ボタンをおしたら つづいて 検索できるようにしたいのです。 できたら、アドバイス等おねがいいたいします。 Dim i,r,j As Integer Dim a1() As String Dim a2 As String a2 = Text.Text For j = LBound(a1) To UBound(a1) r = r + 1 i = a1(j).IndexOf(a2, 0) Do Until i <> 0 text1.Text = Val(i + 1)  i = a1(j).IndexOf(a2, i + 1) text2.Text = r  text3.Text = a1(j) If i <> 0 Then Exit For End If Loop Next a1に以下の内容があった時 a1(0) = "例1" a1(1) = "例2" a1(2) = "例3" ”例”と検索をかけると、 text1.Textには 1と出力。(位置表す) text2.Textには 1と出力。(行表す) text3.Textには 例1と出力。 exit for でループをぬけているのですが。 これを、検索ボタンを押すたびに、行と位置 が表示されるようにしたいのですが、 アドバイスおねがいします。

  • VBでSQLを使い検索をしたいのですが。

    VBでSQLを使い検索をしたいのですが、SELECT文の使い方が分かりません。 下記の記述で、番号、氏名、電話番号をそれぞれのTEXTBOX1,TEXTBOX2,TEXTBOX3の ように各容器にいれたいのでが分かりません。 文をその文増やせばいいのでしょうか、SELECT文1行で複数の結果を受け取る方法を教えて下さい。 宜しくお願い致します。 Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable Dim name As String Dim selcomd As String Dim Value As String name = TextBox11.Text selcomd = "SELECT 番号,氏名,電話番号  FROM meishi WHERE 氏名 like '" & name & "' " SQLCm.CommandText = selcomd

  • VB6のTYPE文をVB.NETのStructureに変えるとき

    VB6のTYPE文をVB.NETのStructureに変えるとき 下記VB6のコードをVB.NETのStructureに変える場合 Type kouzou1 i As Integer j As Integer a As String * 20 b As String * 50 End Type を下記にしてみたのですが *20,*50のところは、どのように表現するのでしょうか。 Structure kouzou1 Dim i As Integer Dim j As Integer Dim a As String * 20 <- ステートメントの終わりを示してくださいのエラーになる。 Dim b As String * 50 <- ステートメントの終わりを示してくださいのエラーになる。 End Structure お教え下さい。

  • VB.NETのメモリ領域について

    VB.NETのメモリ領域について 以下の(1)~(12)の変数のために、 スタック領域、静的領域、ヒープ領域のどこのメモリが使われるか教えてください。 Class Sample   Dim a As Integer '(1)   Dim b As String = "BBB" '(2)   Shared c As Integer '(3)   Shared d As String = "DDD" '(4)   Sub X()     Dim f As Integer '(5)     Dim g As String = "GGG" '(6)     Static h As Integer '(7)     Static i As String = "III" '(8)   End Sub   Shared Sub Y()     Dim k As Integer '(9)     Dim l As String = "LLL" '(10)     Static m As Integer '(11)     Static n As String = "NNN" '(12)   End Sub End Class それぞれこんな認識で合ってますか? スタック領域 (1)(5)(9) スタック領域にポインタ+ヒープ領域に実体 (2)(6)(10) 静的領域 (3)(7)(11) 静的領域にポインタ+ヒープ領域に実体 (4)(8)(12)

  • VB2010にて置換の方法

    TextBox1に'[00:00:00]'や'[05:10:01]'等と入力されています。 (00には00~59までの数字が入力されいています。) これを全てNULLに置換したいのですが、どうやるんでしょうか? 下記の方法だと、一々00~59までコードを書かないといけません。 Dim a sa String Dim b sa String a=TextBox1.Text b=Replace(a, "[00:00:00]", "") TextBox2.Text=b

  • VBのテキスト書き込み読み出し

    VB初心者です。 VBのテキスト書き込み読み出しについて質問させていただきます。 ~使用オブジェクト~ textbox1 textbox2 button1 button2 現在下記の通りtextbox1とtextbox2に書いた文字(length 10まで)をbutton1 clickで C:\test.txtに書き出し、 button2 clickでtextbox1 と textbox2に戻すプログラムを書いてみました。 読み込みのところが現在は2個ですが、実用的には膨大な数にしたいと思っています。 単純に沢山書けばいいのでしょうが現実的ではないのでスッキリと書く書き方はないでしょうか? さらに、例としてtextbox1にAさんの名前textbox2にAさんの年齢をいれたとします。 その際、Bさん以降を登録したいのですがその場合テキストへの書き込みを次行に書き込み 次行を読み込むにはどのように書けばよろしいでしょうか? ご教授お願い致します。 Public Class Form1 '##################################################### '"C:\test.txt"へ書き込み '##################################################### Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim write_data As New System.IO.StreamWriter("C:\test.txt", False, _ System.Text.Encoding.Default) Dim str As String Dim str1 As String str = String.Format("{0, -10}", TextBox1.Text) str1 = String.Format("{0, -10}", TextBox2.Text) write_data.Write(str & str1) write_data.Close() End Sub '##################################################### '"C:\test.txt"の読み込み '##################################################### Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim Reader As New IO.StreamReader("C:\test.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) While Reader.Peek() > -1 '10文字取得 Dim c(9) As Char Dim d(9) As Char Reader.ReadBlock(c, 0, c.Length) Reader.ReadBlock(d, 0, d.Length) TextBox1.Text = c TextBox2.Text = d End While Reader.Close() End Sub End Class

専門家に質問してみよう