痔になりやすい生活習慣とは?

AccessのVBAを教えてください。
「名簿1」というテーブルがあり、そのテーブルの1つのレコードを「名簿2」という別テーブルに移動させたいです。

「名簿検索」フォームがあり、「名簿1」のデータを検索して表示させることができます。
その表示させたある特定のレコードを、「移動」というボタンを押すと「名簿2」へ移動させるような作りにしたいです。
「名簿1」と「名簿2」は全く同じ構造のテーブルです。

初心者のため、一番簡単な方法でやりたいです。
レコードを「名簿2」へコピーし、その後「名簿1」のレコードを削除しようと思ったのですが、なかなかうまくできません。
insert into を使ってみたのですが、テーブルのデータ全てがコピーされてしまいます。

Access2010を使用しています。
よろしくお願いいたします。

A 回答 (2件)

No.1です


以下を追加してみてください(変数名は任意です)
Dim RSF As Recordset ← フォームに表示されているレコード用
DIM I As Integer    ← カウンター用の変数

Set RSF = Me.Recordset でRSFにフォームに表示されているレコードセット

RS.AddNew から RS.Update の部分を以下に変更します

RS.AddNew
 For I = 0 To フィールドの数-1 ← フィールド数が20ならば19
  RS.Fields(I) = RSF.Fields(I)
 Next I
RS.Update

これでコピーできます。
    • good
    • 0
この回答へのお礼

無事にできました!
本当にありがとうございました。

お礼日時:2017/08/22 10:26

名簿1と名簿2のフィールドが 氏名、住所、TEL だったとします。


名簿検索フォームに配置したテキストボックスが、Tx_氏名、Tx_住所、Tx_TELだとして、

Dim DB As Database
Dim RS As Recordset

Set DB = CurrentDb
Set RS = DB.OpenRecordset("名簿2", dbOpenDynaset)

RS.AddNew
RS!氏名 = Me.Tx_氏名  ←名簿2へコピー
RS!住所 = Me.Tx_住所
RS!TEL = Me.Tx_TEL
RS.Update

DoCmd.SetWarnings False ← システムメッセージを非表示
DoCmd.RunCommand acCmdDeleteRecord ←名簿1(名簿検索フォーム)のレコード削除
DoCmd.SetWarnings True ← システムメッセージを表示

RS.Close: Set RS = Nothing
DB.Close: Set DB = Nothing
    • good
    • 0
この回答へのお礼

とても分かりやすくありがとうございます。
ちなみに、フィールドがかなり多数あるのですが、
ひとつひとつ指定ではなく、まとめてすべてを指定する方法はありますでしょうか。
2つのテーブルはフィールド名も、テーブル上のフィールドの位置もすべて同じです。
手動でいうと、名簿1で行選択してコピーして、名簿2へ貼付け という感じです。

お礼日時:2017/08/22 09:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QACCESS2010について

昨日までは通常通り、データ入力できていました。
突然、データ入力画面のボタンを押すと”Microsoft Accessは動作を停止しました”、”問題が発生したため、プログラムが正しく動作しなくなりました。プログラムが閉じられ、解決策がある場合はWindowsから通知されます”となり、プログラムが終了となります。
特に変更していないので、原因が不明です。
どなたか教えてください。宜しくお願いします。

Aベストアンサー

WINDOWS UPdateかな
https://www.microsoft.com/ja-JP/download/details.aspx?id=13255
データベースエンジンを再導入してみてください。
64/32ビット版がありますのでご注意を
だめならアクセスの再インストールです。

Q全てのテキストボックスをセルに出力

VBAを使ってシート上の全てのテキストボックスのテキストを取得・出力するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいと思います。

環境:Windows10 Office2016

状況:
既存のエクセルシートに約100個以上のテキストボックスが作成されており
一覧を作成するためにセルにコピーしたい。

テキストボックスの並び順などは一切こだわりません。
そもそも実現可能かでもご存知の方いらっしゃいましたらお教えください。

Aベストアンサー

> 上記は出力結果の例ですが、数字部分はテキストの作成順を表すものでしょうか。
> そうであれば、例えば新規に追加した図形は textbox 164 となるべきだと思いますが

Excelが勝手に付ける番号って以上は、特に決まり無いのでは。
手動でtextbox 165とか、textbox 9999999とか作ったとして、次に連番振らなきゃならないって事もないでしょうし。


> If tx.Type = msoTextBox Then
> のほうが良いかと。

良さげですね。

QVBAエディタのコード画面で、カーソル位置の行番号表示の方法

当方のPCは、Win8.1(64ビット)、エクセル2013です。
最近まで、Codeの上にカーソルを置くと、
画面の上部に行番号が表示されていました。
MsgBox "行番号121のCode実行結果 = " & xy結果、
と言う様な使い方をしていました。
最近、この行番号が表示されなくなりました。
何か、設定を変えれば、元に戻せますでしょうか?
*****
(なお、WEB検索では、「VB6ideAddLineNumbersAddin.dll」があるようですが、
regsvr32で、」うまく登録できません。)

Aベストアンサー

下図のようなものでしょうか?
「表示」「ツールバー」の「標準」にチェックを入れてみてください。

QパソコンでACCESSを習おうと思っているのですが

今のパソコン教室はまだ2013でやっているようです。2016になると試験方式が少しかわるみたいですね。新しくFOM出版のサイトを見ていたら2013だと、今まで使っていたCDでは一問一答式でわかりやすかったのですが、そもそも今2013年版Access売ってないですよね。どっちでとったほうがいいのだろうかと悩んでいます。
2016から一問一答式のCDがついてないみたいで。それも不安です。

Aベストアンサー

>そもそも今2013年版Access売ってないですよね。

パッケージ版は製造中止のようですが、Office365ならOffice2016かOffice2013を選択可能(いずれかで片方で有ればいつでも切り替え可能)のようです。

一カ月は無料で試用できますので、切り替えの確認も含めて試されてはどうでしょうか。

Q私のサイトに変なアクセスがあるので、調べたところ「p●●●●●.osaknt01.ap.so-net

私のサイトに変なアクセスがあるので、調べたところ「p●●●●●.osaknt01.ap.so-net.ne.jp」というホスト名からアクセスされていることがわかりました。このホスト名を見る限り大阪からのアクセス
と思ったのですが、IPアドレス検索サイトで調べたところ、東京都品川区からアクセスされていると出てきます。なぜそうなるのでしょうか?誰か詳しい人、教えて下さい。

Aベストアンサー

IPひろば…ですかねぇ。

とりあえず、国内に割り振られたIPからのアクセスである。
って程度で、それ以上調べてもおそらく意味はない。
としておいたほうが精神衛生上いいのでは?
どうせ犯罪関係でもなければIPアドレスけら個人特定できないんだし。
# うちのSSHサーバへのアタックではさくらのVPSから。ってのはありましたけど。


途中までリモートホスト名が同じなのに…ってのは、事業者内でリモートホスト名変えずに割り当て地域を変えたとかの事情かもしれませんし、IPひろばに登録した人が間違えて登録したのかも知れない。
無線LANルータのMACアドレスで大まかな住所の特定をしている場合に、その持ち主が引っ越ししたから、以前の住所が残っていたのかも知れない。
# 今回のパターンだと、品川区でMACアドレスの収集と住所が登録され、大阪圏に引っ越ししてIPひろばに登録され、その時に参照されたMACアドレスと住所が品川区の情報しかなかったのかも知れない。
# 中古の無線LANルータ買ったら、MACアドレスと住所の収集データが以前の持ち主の住所になっていただけかも知れない。

https://saku.io/should-add-nomap-suffix-in-ssid/
など。

IPひろば…ですかねぇ。

とりあえず、国内に割り振られたIPからのアクセスである。
って程度で、それ以上調べてもおそらく意味はない。
としておいたほうが精神衛生上いいのでは?
どうせ犯罪関係でもなければIPアドレスけら個人特定できないんだし。
# うちのSSHサーバへのアタックではさくらのVPSから。ってのはありましたけど。


途中までリモートホスト名が同じなのに…ってのは、事業者内でリモートホスト名変えずに割り当て地域を変えたとかの事情かもしれませんし、IPひろばに登録した人が間違えて登録した...続きを読む

QACCESS vbaでレポート名の変更をプログラムでできるんでしょうか?

ACCESS vbaでレポート名の変更をプログラムでできるんでしょうか?

Aベストアンサー

DoCmd.rename "Old Report Name", acReport, "New Report Name"
で行けるんじゃないかな? 
https://msdn.microsoft.com/en-us/library/office/ff823209.aspx
docmdをvbaと呼ぶかどうかは、よくわからないけど、
そういう意味でのVBAなら、ADOXでも可能だと思う。

QVBAのコマンドボタンと入力について

VBA初心者でよくわからないので教えて下さい。
やりたいことは、エクセルシートのA列とかに数個のデータを入力し、コマンドボタンを
押すと入力したデータを取り込んで、処理した値を表示させたいのですが、
UserFormでコマンドボタンを作成し、実行すると、エクセルシートのセルに
入力できなくなってしまいます。
 コマンドボタンを設定しても、通常通り、エクセルシートに入力および編集等ができるように
する方法を教えて下さい。
 また、できないようであれば、コマンドボタン設定以外でなにか方法があれば、
アドバイスお願いします。

Aベストアンサー

>UserFormでコマンドボタンを作成し、実行すると、エクセルシートのセルに入力できなくなってしまいます。

こう言った趣旨のことでしょうか?
UserForm1.Show vbModeless
とすれば、「UserForm1」を表示した状態でもシートの編集は可能になります。
参考
http://www.shoeisha.com/book/hp/pc/office/Excel/files/text2.html


>コマンドボタンを押すと入力したデータを取り込んで、
どこに(どこの値を)取り込みたいのでしょうか?
例えば、UserFormに設定された変数に、sheet1のA1入力(代入)したいのであれば、
UserForm1.変数名=sheets(1).Range("A1")

UserForm1.変数名=sheets(1).cells(1,1)
といったことで可能です。

>処理した値を表示させたいのですが、
こちらは、前述とは逆に
sheets(1).Range("A1")=「処理した値」
とすれば表示(代入)できるはずです。

QVBA教えてください

以下のようにテキストファイルに記入されている文字列をエクセルに抽出したいのですが
なかなか思うようにいきません。

<テキストデータ>
項 A B C D
1 40
2 30
3 20

<エクセルに抽出したいデータ>
1 40
2 30
3 20


どなたかお詳しい方いらっしゃいましたら教えて頂けると幸いです。

Aベストアンサー

大変遅くなりました。以下のような感じはいかがでしょうか?
---------------------------------------------------------------------------------
Sub Sample()
Dim 対象ファイル As String
Dim 行データ As String
Dim 位置 As Long
Dim 対象位置 As Long
Dim 文字数 As Long
Dim 対象 As Boolean
Dim 行 As Long
Dim 比較文字 As String
Dim 数字 As String
対象ファイル = Application.GetOpenFilename("テキスト ファイル,*.txt")
If 対象ファイル = "False" Then Exit Sub
Open 対象ファイル For Input As #1
Do Until EOF(1)
Line Input #1, 行データ
If 対象 Then
If 対象位置 > Len(行データ) Then 対象 = False
If Mid(行データ, 1, 1) < "0" Then 対象 = False
If Mid(行データ, 1, 1) > "9" Then 対象 = False
If Mid(行データ, 対象位置, 1) < "0" Then 対象 = False
If Mid(行データ, 対象位置, 1) > "9" Then 対象 = False
Else
比較文字 = ""
For 位置 = 1 To Len(行データ)
If Mid(行データ, 位置, 1) <> " " Then
比較文字 = 比較文字 & Mid(行データ, 位置, 1)
If Mid(行データ, 位置, 1) = "D" Then 対象位置 = 位置
End If
Next
End If
If 対象 Then
行 = 行 + 1
数字 = ""
For 位置 = 1 To 対象位置
If Mid(行データ, 位置, 1) < "0" Then Exit For
If Mid(行データ, 位置, 1) > "9" Then Exit For
数字 = 数字 & Mid(行データ, 位置, 1)
Next
Cells(行, 1).Value = 数字
数字 = ""
For 位置 = 対象位置 To Len(行データ)
If Mid(行データ, 位置, 1) < "0" Then Exit For
If Mid(行データ, 位置, 1) > "9" Then Exit For
数字 = 数字 & Mid(行データ, 位置, 1)
Next
Cells(行, 2).Value = 数字
Else
If 比較文字 = "ABCD" Then 対象 = True
For 位置 = 1 To Len(行データ)
If Mid(行データ, 位置, 1) = "D" Then 対象位置 = 位置
Next
End If
Loop
Close #1
End Sub
---------------------------------------------------------------------------------

大変遅くなりました。以下のような感じはいかがでしょうか?
---------------------------------------------------------------------------------
Sub Sample()
Dim 対象ファイル As String
Dim 行データ As String
Dim 位置 As Long
Dim 対象位置 As Long
Dim 文字数 As Long
Dim 対象 As Boolean
Dim 行 As Long
Dim 比較文字 As String
Dim 数字 As String
対象ファイル = Application.GetOpenFilename("テキスト ファイル,*.txt")
If 対象ファイル = "False" Then Exit Sub
Open 対象ファイル For Inp...続きを読む

QACCESS VBA 文字抽出について 文字の抽出をVBAにて行いたいのですが教えてください テキス

ACCESS VBA 文字抽出について

文字の抽出をVBAにて行いたいのですが教えてください

テキストボックス1に170626と入力を行う
その際必ず数値が6ケタしか入力できないようにする
6桁入力が完了すると、自動で
テキストボックス2に17
テキストボックス3に06
テキストボックス4に26
と分けて抽出を行う
このような仕様にしたいのですが可能でしょうか?

Aベストアンサー

>その際必ず数値が6ケタしか入力できないようにする

テキストボックス1のプロパティシート、データタブの入力規則に「Len([テキストボックスの名前])=6」
とすればよいです。6文字以外の時にメッセージを足したい場合は、その下のエラーメッセージ欄に
例えば「6文字で入力してください」とか記述すれば6文字以外の場合はメッセージが出ます。

抽出は、テキストボックス1の更新後処理イベントに以下のコードを書いてみてください。

Me.テキストボックス2 = Left(Me.テキストボックス1, 2)
Me.テキストボックス3 = Mid(Me.テキストボックス1, 3, 2)
Me.テキストボックス4 = Right(Me.テキストボックス1, 2)

6文字チェックもVBAで行うなら

If Len(Me.テキストボックス1) <> 6 Then
MsgBox "6文字で入力してください"
ELSE
 ※上記のコード
End If

QAccess VBA で txt文を保存したい!

Access2013 のVBAで、

 Dim setsumei as string

setsumei="........"

このように setsumei に、ある説明文を代入しています。

 あるボタンを押せば、単純にこの説明文をデスクトップ上に「setsumei.txt」として
保存するようにしたいのですが、txt文に変換して保存する方法がわかりません。

Aベストアンサー

いくつかやり方がありますが、File System Object を使うなら、
参照設定でScripting Runtimeにチェックを入れて、、、

Dim FSO as New FileSystemObject
Dim TS as textstream

Set ts = fso.OpenTextFile("D:\Tips.txt", ForWriting, True, TristateFalse)
ts.writeline setsumei

ts.close
set ts = nothing
set fso = nothing
みたいな感じかな?

opentextfileは引数で上書するかどうかなどを指定します。
https://msdn.microsoft.com/ja-jp/library/cc428044.aspx


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング