• 締切済み

VB2005のコードの書き方

プログラミングの超初心者なので、基本的すぎることかもしれませんが、どうしても自分では解決できないので教えてください!! 「oldDataSet」の「TM_USER」テーブルにある「PASSWORD」フィールドのデータを更新するプログラムを作りたいと思っています。 「oldDataSet」の「TM_USER」テーブルにある「USER_ID」と「newDataSet」の「T_newpass」テーブルにある「userID」のデータは同じものなので、それをキーにして、「PASSWORD」のデータを「newDataSet」の「T_newpass」テーブルにある「newpass」のデータに更新しようと以下のようなコードを書いてみたのですが、 一行目しか更新されず、二行目以下は元のパスワードのまま終了してしまいます。 どのように書いたら最後まで更新できるのでしょうか? どなたか教えてください。よろしくお願いします。 ---------------------------------------------------------------- For j = 0 To oldDataSet.TM_USER.Rows.Count - 1 For i = 0 To newDataSet.T_newpass.Rows.Count - 1 If oldDataSet.TM_USER.Rows(TM_USERDataGridView.CurrentRow.Index)("USER_ID") = newDataSet.T_newpass.Rows(i)("userID") Then oldDataSet.TM_USER.Rows(TM_USERDataGridView.CurrentRow.Index)("PASSWORD") = newDataSet.T_newpass.Rows(i)("newpass")   End If Next Next MsgBox("終了") ----------------------------------------------------------------

みんなの回答

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.1

oldDataSetに関するループ変数「j」は、どこで使っているんです? > oldDataSet.TM_USER.Rows(TM_USERDataGridView.CurrentRow.Index) は、 > oldDataSet.TM_USER.Rows(j) の間違いとか・・・

関連するQ&A

  • 1次元配列のソート方法

    配列のソートメソッドについて質問させていただきます。 VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。 データテーブルが格納されている配列があり、 その配列をソートしたいと思っています。 データテーブルの中に「NO」と「ID」というフィールドがあります。 NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、 条件によっては上手くいきません。 よろしければ、教えていただけないでしょうか? また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか? 宜しくお願いいたします。 [例] workDT() ← 元のデータテーブル配列 Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列 Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列 Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列 Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列 Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用 ' IDでソート For i = 0 To workDt.Length - 1 ID(i) = workDt(i).Rows(0).Item("ID") Index(i) = i Next ' 配列をIDでソート Array.Sort(ID, Index) ' ソート後配列をテンプ配列に格納 For i = 0 To workDt.Length - 1 tmpDatatable(i) = workDt(Index(i)).Copy Next ' NOでソート For i = 0 To tmpDatatable.Length - 1 NO(i) = tmpDatatable(i).Rows(0).Item("NO") Index(i) = i Next ' 配列をNOでソート Array.Sort(NO, Index) ' ソート後配列を格納 For i = 0 To tmpDatatable.Length - 1 Datatable(i) = tmpDatatable(Index(i)).Copy Next これで各配列を初期化します。 workDTに5つのデータテーブルが入っていて workDT(0):ID=3、NO=1 workDT(0):ID=1、NO=5 workDT(0):ID=2、NO=5 workDT(0):ID=4、NO=5 workDT(0):ID=5、NO=7 (IDは重複不可設定、NOは重複可設定です。) とした場合、NOのソートのところで変な順番になってしまいます。 Array.Sort(NO, Index) このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか? 環境はWindowsXPSP3とVB2005です。

  • VBAのコードに関する質問です。

    以下のコードで実行しているのですが上手くデータ数のカウンタが上手くいきません。助言をお願いしたいです。 Range("D2").Select ActiveCell.Formula = "=0.001*C2+D1" Range("D2").Select Selection.AutoFill Destination:=Range("D2:D" & fin), Type:=xlFillDefault Range("D2:D" & fin).Select Dim i As Long, j As Long, flg As Boolean Dim i1 As Long j = 1 For i = 2 To Cells(Rows.count, 2).End(xlUp).Row If Cells(i, 2) = 2 Then flg = True ElseIf Cells(i, 2) = 3 And flg = True Then i1 = i Cells(1, 7) = i - 1 Cells(j, 5) = Cells(i, 4) Cells(j, 6) = Cells(i - 1, 4) flg = False Exit For Else: flg = False End If Next For i = i To Cells(Rows.count, 2).End(xlUp).Row If Cells(i, 2) = 2 Then flg = True ElseIf Cells(i, 2) = 3 And flg = True Then j = j + 1 Cells(j, 7) = i - i1 - 2 i1 = i Cells(j, 5) = Cells(i, 4) Cells(j, 6) = Cells(i - 1, 4) flg = False Else: flg = False End If Next Range("E1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Cells(1, 5) = Cells(2, 4) Cells(Rows.count, 6).End(xlUp).Offset(1).Value = _ Cells(Rows.count, 4).End(xlUp).Value Cells(Rows.count, 7).End(xlUp).Offset(1).Value = 200 Range("H1").Select ActiveCell.Formula = "=(F1-E1)/G1" Range("H1").Select Selection.AutoFill Destination:=Range("H1:H16"), Type:=xlFillDefault Range("H1:H16").Select Range("E1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("F1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("G1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("H1").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Dim rowStr As Long, rowEnd As Long Dim A, D, Da, H, K '演算:K=D-Da-H*A Dim cntS As Integer, cntA As Integer Dim cntD As Integer, cntH As Integer Dim r As Long, t As Long rowStr = 2 '開始行 rowEnd = Cells(Rows.count, 7).End(xlUp).Row 'G列で最終行を求める cntS = 1 '周期初期値 cntD = rowStr 'D列行数初期値 cntH = rowStr 'H列行数初期値 For r = rowStr To rowEnd cntA = rowStr For t = 1 To Cells(r, 7) '各周期の繰り返し処理 A = Cells(cntA, 1).Value D = Cells(cntD, 4).Value If t = 1 Then If r = rowStr Then Da = 0 '1周期目は0とする Else '2週期目以降は最初の値に固定 Da = Cells(cntD, 4).Value End If '周期の区切りをF列に出力 Cells(cntD, 11).Value = cntS & "周期" End If H = Cells(cntH, 8).Value K = D - Da - H * A '演算 Cells(cntD, 10).Value = K cntA = cntA + 1 'A列カウンタ更新 cntD = cntD + 1 'D列カウンタ更新 Next t cntS = cntS + 1 '周期カウンタ更新 cntH = cntH + 1 'H列カウンタ更新 Next r

  • コードがうまく作れません

    iの値に一致するセルをAK列のセルから探し出し、一致したら同じ行のセルBA列の値を合計します。iの合計が出たらワークシート2にiの値と合計をセルに貼り付けます。 次にiの値を1増やしてまた同じセルを探し出し、合計を出してワークシートの下の行のセルへ貼り付けます。 これで実行すると合計が全て0になります。どうかご指導をお願いします。 Sub sou() Dim h, count, goukei, i, e, f h = 1 e = 1 f = 1 count = 0 goukei = 0 Worksheets("Sheet1").Activate Worksheets("Sheet2").Activate For i = 12345 To 45787 For h = 1 To Cells(Rows.count, "AK").End(xlUp).Row If i = Cells(h, "AK") Then count = Cells(h, "BA") goukei = count + goukei End If Next h Worksheets("sheet2").Cells(e, "A") = i Worksheets("sheet2").Cells(f, "B") = goukei e = e + 1 f = f + 1 Next i End Sub

  • VB2005でINSERT文が。。。

    こんにちわ、VB2005初心者でいつもお世話になってます。 単純なINSERT文「コンマ、')'、または有効な式の継続文字が必要です」のエラーです。記述のどこが間違いなのかご指摘いただけますでしょうか。 DataGridViewにAテーブル(MDB、5フィールド)データを表示して新規入力されたデータ(行)をAテーブルに追加しようとしています。これはデータソース追加でのクエリーではなくPG内に記述しています。 「values("& dTbl.Rows(i)(0)","」の「","」がエラーとなっています。 If dTbl.Rows(i).RowState = DataRowState.Added Then Try dCom = New OleDb.OleDbCommand( _ "INSERT INTO Aテーブル values("& dTbl.Rows(i)(0)","& dTbl.Rows(i)(1)"," _ & dTbl.Rows(i)(2)"," & dTbl.Row(i)(3)"," & dTbl"." & Row(i)(4)", cn) dCom.ExecuteNonQuery() cn.Close() MsgBox(dCom) MessageBox.Show("追加しました。", "通知") Catch ex As Exception cn.Close() MessageBox.Show(ex.Message) End Try End If よろしくお願いいたします。

  • DataTableで重複行を削除したい

    こんにちは。 DataTableで重複した行を削除するプログラムが作れず悩んでいます。 もしよろしければ、教えてもらえないでしょうか? 例えば下記のようなDataTableのとき。 ID CD ------------- 5  A1 6  A2 8  A3 9  A4 10  A5 5  A6 10  A7 NULL A8 NULL A9 NULL A10 ------------- 下記のようにしたいと思っています。 ID CD ------------- 5  A1 6  A2 8  A3 9  A4 10  A5 NULL A8 ------------- 重複しているレコードは最初にヒットしたものを残します。 そこで下記のようなプログラムを書いてみたのですが、駄目でした。 ' 重複行を削除する For i = 0 To DataTable.Rows.Count - 1 Index = temp.IndexOf(DataTable.Rows(i).Item("id")) If Index = -1 Then temp.Add(DataTable.Rows(i).Item("id")) Else dr = DataTable.Rows(i) DataTable.Rows.Remove(dr) If i = DataTable.Rows.Count - 1 Then Exit For End If i = i - 1 End If Next どなたか分かる方、よろしくお願いいたします。

  • VB2005でExcelファイルを開く

    こんにちは。 VB2005の勉強をさせて頂いています。 ボタンを押すとコモンダイヤログを表示し、 ダイヤログ内で選択したExcelファイルの内容をフォームのDataGridViewにもって行きたいと思っていますが 上手くできません。一応現在のソースを下記に置いておきます。 特に、下記のソースの 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next のループ条件xlSheet.Rows.Count - 1がどうも6万くらいになっているようなのですが、 実際セルに入力したデータは5行程度のものです。 1セル1セル文字が入っているかどうかを調べていかないといけないのでしょうか? よろしければ、具体的なソースやアドバイスをお願いいたします。 -------------------------------------- Dim ofd As New OpenFileDialog() 'ofdの設定をする 'ダイアログを表示し、戻り値が [OK] の場合は、選択したファイルを表示する If ofd.ShowDialog() = DialogResult.OK Then '選択されたファイルを読み取り専用で開く Dim ReadFile As System.IO.Stream ReadFile = ofd.OpenFile() If Not (ReadFile Is Nothing) Then Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks '既存ファイルを開く場合 Dim xlFilePath As String = ofd.FileName Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheets As Excel.Sheets = xlBook.Worksheets Dim xlSheet As Excel.Worksheet = xlSheets.Item(1) 'DataGridView1に展開 For i As Integer = 0 To xlSheet.Rows.Count - 1 DataGridView1.Rows.Add() DataGridView1.Item(0, i) = xlSheet.Rows.Item(i, 0) Next 'xlSheet の解放 'xlSheets の解放 'xlBook を閉じる 'xlBook の解放 'xlBooks の解放 'Excelを閉じる 'xlApp を解放 End If End If ofd.Dispose()

  • Excelマクロ 複数の条件と範囲条件

    色々と自分でもやってみたのですがうまくいかないので教えて頂けたら嬉しいです。 添付画像の左側の様な伝票番号と通し番号と商品名がふってあるシートが存在します。 同じ伝票番号内で商品に「松」もしくは「梅」が含まれているときのみ、その伝票番号の最終行に「送料」の行を追加したいです。その際に通し番号も加算したものを追加します。 これが上手く作れません。 ↓とりあえず作りかけたものの変に行が挿入されるマクロを記載します。ここからの修正でうまくいくなら修正点を教えて頂けると幸いです。 Sub 更新伝票情報() Dim lastRow As Long Dim currentRow As Long Dim currentInvoice As String Dim currentNumber As Integer ' シートの最終行を取得 lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' 初期値の設定 currentInvoice = Cells(2, 1).Value currentNumber = 1 ' 行ごとに処理 For currentRow = 2 To lastRow ' 伝票番号が変わった場合 If Cells(currentRow, 1).Value <> currentInvoice Then ' 新しい伝票番号の設定 currentInvoice = Cells(currentRow, 1).Value ' 通し番号をリセット currentNumber = 1 End If ' 商品名に「松」または「梅」が含まれる場合 If InStr(1, UCase(Cells(currentRow, 3).Value), UCase("松")) > 0 Or InStr(1, UCase(Cells(currentRow, 3).Value), UCase("梅")) > 0 Then ' 最終行の下に新しい行を挿入 Rows(currentRow + 1 & ":" & currentRow + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ' 通し番号を加算し、B列を更新 Cells(currentRow + 1, 2).Value = currentNumber ' C列を「送料」に更新 Cells(currentRow + 1, 3).Value = "送料" ' 通し番号を1つ加算 currentNumber = currentNumber + 1 End If Next currentRow End Sub

  • フレームワークで、htmlが入り組んでいたコードを実装するには

    以下のようなコードを、フレームワークを使って実装するにはどうしたらいいのでしょうか。 フレームワークはZendFrameworkです。 ※配列に入っているデータを表に出力しているだけです。 (列が少ない行は列の結合をしてます) このコードを、フレームワークのViewに落としたら、 MVCの考え方からは逸脱してしまうのでしょうか? Viewの中で、ループなどプログラムを組んでしまうのはおかしいですか? <html> <head> <title>test</title> </head> <body> <?php # 表に出力するデータ $t_array = array( array( 'a', 'b', 'c' ), array( 'd', 'e' ), array( 'f', 'g' ) ); $t_count = count($t_array); # データがあれば if ( $t_count ){ foreach ( $t_array as $t_value ){ # 各要素数が表の列になるので要素数を取得 $t_col_count[] = count($t_value); } # 今から作成する表の最大列数は$t_row_count[0] arsort($t_col_count,SORT_NUMERIC); print '<table border=1>'; foreach ( $t_array as $t_key => $t_value ){ print '<tr>'; print '<td>'.$t_key.'</td>'; $i = 1; $t_value_count = count($t_value); foreach ( $t_value as $t_key2 => $t_value2 ){ # 表の最大列数と、この行の最大列数が同じの場合 if ( $t_col_count[0] == $t_value_count ) { print '<td>'.$t_value2.'</td>'; } else { # この行の最大列数と、今の列数が同じ場合、列を結合する if ( $t_value_count == $i ){ $t_col = $t_col_count[0] - $i + 1; print '<td colspan='. $t_col. '>'. $t_value2. '</td>'; } else { print '<td>'.$t_value2.'</td>'; } } $i++; } print '</tr>'; } print '</table>'; } ?> </body>

    • 締切済み
    • PHP
  •  条件付き書式での色付けで以下のコードを教えて頂いたんですが、色付けを

     条件付き書式での色付けで以下のコードを教えて頂いたんですが、色付けを 適用する範囲をどうやって変更すればいいのでしょうか? もしよろしければ、範囲の変更の仕方と、コードの意味を教えて頂けますか? めんどうですがよろしくお願いします・・・。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Columns(3).Interior.ColorIndex = xlNone Dim i, j As Long For i = 1 To Cells(Rows.Count, 3).End(xlUp).Row For j = 1 To Cells(Rows.Count, 6).End(xlUp).Row If Cells(i, 3) = Cells(j, 6) Then Cells(i, 3).Interior.ColorIndex = Cells(j, 7).Interior.ColorIndex End If Next j Next i End Sub

  • ユーザーフォームに教えてください!

    病院に勤めている者ですが、今エクセルで患者さまデータを作成しており、ユーザーフォームを使って患者さま情報を一目みてわかるようにしています。オートフィルターとスクロールバーを同期させてテキストバックスに反映させるようにしているのですが、ユーザーフォームに入力すれば直接セルに入力できるようにするにはどうしたら良いでしょうか。記述は下記のとおりです。 Private Sub ScrollBar1_Change() SelectRow For i = 1 To 65 Me.Controls("textbox" & CStr(i)).Value = Selection.Cells(1, i) Next End Sub Private Sub UserForm_Initialize() ScrollBar1.Min = 1 ScrollBar1.Max = CountRows() ScrollBar1.LargeChange = ScrollBar1.Max \ 10 + 1 ScrollBar1.Value = 1 SelectRow For i = 1 To 65 Me.Controls("textbox" & CStr(i)).Value = Selection.Cells(1, i) Next End Sub Sub SelectRow() Dim iRows As Long iRows = 0 For i = 5 To ActiveSheet.UsedRange.Rows.Count If Not Rows(i).Hidden Then iRows = iRows + 1 If iRows = ScrollBar1.Value Then ActiveSheet.Rows(i).Select Exit For End If End If Next i End Sub Function CountRows() As Long Dim iRows As Long iRows = 0 For i = 1 To ActiveSheet.UsedRange.Rows.Count If Not Rows(i).Hidden Then iRows = iRows + 1 End If Next i CountRows = iRows End Function 具体的な記述があればありがたいです!

専門家に質問してみよう