ママのスキンケアのお悩みにおすすめアイテム

Access2016 のVBAについて教えてください。
例えば以下のようなテーブルがあるとします

Tテーブル(各フィールドは全てテキスト型)
│ 伝票 │  日付  │ 商品 │ 備考 │
  D001  2017/06/15  商品A  備考A
  D002  2017/07/02  商品B  備考B
  D003  2017/05/30  商品C  備考C
  D004  2017/07/19  商品D  備考D
  D005  2017/07/10  商品E  備考E

Tテーブルの日付フィールドから年月を取り出して(例 D002 ならば ”201707”)、
年月が201707のレコードを抽出するようなSQL構文を記述してみました。
-------------------
mySQL = "SELECT 伝票, 日付, 商品, (Left(日付,4) & Mid(日付,6,2)) AS 年月 FROM Tテーブル "
mySQL = mySQL & "WHERE 年月='201707';"

Set DB = CurrentDb
Set RS = DB.OpenRecordset(mySQL, dbOpenSnapshot)

RS.MoveFirst
Do Until RS.EOF
Debug.Print RS!伝票 & " " & RS!日付 & " " & RS!商品 & " " & RS!年月
RS.MoveNext
Loop
-----------------

ここで1行目のSQL構文までではうまくレコードセットができたのですが、
2行目の WHERE ~ を追記すると以下のエラーとなってしまいます。

実行時エラー ’3061’
パラメーターが少なすぎます。1を指定してください

このエラーを無くすためには、どのようにすればよいのでしょうか?
よろしくお願いいたします。

A 回答 (3件)

WHERE句では列別名が使用できません。

決まり事です。
シコシコ書いてください。
    • good
    • 1
この回答へのお礼

ありがとうございました。
WHERE句に、そのような決まりがあったのですね!
「年月」は抽出のために作っていたので、ならばと思いSQL文を
mySQL = "SELECT 伝票, 日付, 商品 FROM Tテーブル "
mySQL = mySQL & "WHERE (Left(日付,4) & Mid(日付,6,2))='201707';"
に変えても無事に抽出することが出来ました。

お礼日時:2017/07/28 19:57

WHERE 年月='201707';



WHERE Left(日付,4) & Mid(日付,6,2) = '201707';

にして見てはどうでしょうか
    • good
    • 0
この回答へのお礼

ありがとうございました。
ご指摘のように修正したら思った通りに抽出ができました!

お礼日時:2017/07/28 19:53

変数MySQLの内容をダンプする(標準出力する)命令を追加して実行してみましょう。


そこに表示されるのが実行されているSQL文です。それを見れば「パラメーターが少なすぎます」の意味がわかるかと思います。
追加部分にスペースなどちゃんと入っていますか?

参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございました。
mySQLの中身は SELECT 伝票, 日付, 商品, (Left(日付,4) & Mid(日付,6,2)) AS 年月 FROM Tテーブル WHERE 年月='201707';
だったので、WHERE句 の「年月」に原因が有ったようです。

お礼日時:2017/07/28 19:51

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

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

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

QC言語で、べき乗の計算をするプログラムについてです

X^8の計算を、掛け算を使わずに、足し算と引き算を使って計算するプログラムを作成するというものです。
足し算のみを使ってべき乗の計算をするプログラムは以下のソースコードの様にできたのですが、足し算と引き算の両方ともを使って計算するプログラムがわかりません。
べき乗の計算をどのように考えれば、足し算と引き算の両方を使って計算できるのか教えてください。
以下、足し算のみを使って計算するプログラムのソースコードです。
・・・ソースコード・・・
#include<stdio.h>

int main(void) {

int i, j, k;
i = 0; ///①Xの加算回数の値を保持する変数iを0に初期化する。///
j = 0; ///②X^2の加算回数の値を保持する変数jを0に初期化する。///
k = 0; ///③X^4の加算回数の値を保持する変数kを0に初期化する。///
double X, goukei1, goukei2, goukei3;
X = 0;
goukei1 = 0; ///④X^2の計算値を保持する変数goukei1を0に初期化する。///
goukei2 = 0; ///⑤X^4の計算値を保持する変数goukei2を0に初期化する。///
goukei3 = 0; ///⑥X^8の計算値を保持する変数goukei3を0に初期化する。///

printf("X=");
///数値Xを入力///
scanf_s("%lf", &X);

///⑦iがX以下か判定し、真ならば⑧~⑨を繰り返し、偽ならば繰り返しを終了する。///
for (i = 0; i < X; i++) { ///⑨iに1を加算する。///
goukei1 += X; ///⑧goukei1にXを加算する。///
}

///⑩jがgoukei1以下か判定し、真ならば⑪~⑫を繰り返し、偽ならば繰り返しを終了する。///
for (j = 0; j < goukei1; j++) { ///⑫jに1を加算する。///
goukei2 += goukei1; ///⑪goukei2にgoukei1を加算する。///
}

///⑬kがgoukei2以下か判定し、真ならば⑭~⑮を繰り返し、偽ならば繰り返しを終了する。///
for (k = 0; k < goukei2; k++) { ///⑮kに1を加算する。///
goukei3 += goukei2; ///⑭goukei3にgoukei2を加算する。///
}
///最終的な計算結果を出力///
printf("X^8=%f", goukei3);

return 0;
}

X^8の計算を、掛け算を使わずに、足し算と引き算を使って計算するプログラムを作成するというものです。
足し算のみを使ってべき乗の計算をするプログラムは以下のソースコードの様にできたのですが、足し算と引き算の両方ともを使って計算するプログラムがわかりません。
べき乗の計算をどのように考えれば、足し算と引き算の両方を使って計算できるのか教えてください。
以下、足し算のみを使って計算するプログラムのソースコードです。
・・・ソースコード・・・
#include<stdio.h>

int main(void) {
...続きを読む

Aベストアンサー

「引き算を使え」という問題の意図がよくわかりませんが、単純にfor文のカウンタ(質問文ではi, j, k)を加算ではなく減算でカウントするっていう意味だったりしないでしょうか。

ところで、X^8 = ((X^2)^2)^2 というアイデアは数学的には賢いやり方ですが、
足し算縛りのプログラムで作ると実は計算量は大きくなると思います。
X^8 = ((((((X*X)*X)*X)*X)*X)*X)*X の方が、実は計算回数が少なくて済みます。
X=10の場合、前者は10,110回、後者は70回の足し算になります。

QVBAか関数でできるのでしょうか?

いつもこちらで皆さんに助けていただいてます。昨日質問しましたが画像が張り付けられていなかったので再度質問です。

”仕入表”タブに入力されたデータが横並びのデータです。
例えば、商品コード/品名/価格/色/入荷数 の並び順で、入力されています。一つの品番に対して色数は1から10個あり、色/入荷数/色/入荷数という風に構成されてます。

そこでこちらでお世話になり、仕入表に入力したデータを縦並びに色別で”在庫表”タブに表を作れるようなVBAを教えていただきました。

画像の仕入表は上の表で、下の表が在庫表に転記されたときの例です。
因みにその時のVBAはこちらです。


Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Application.Calculation = xlCalculationManual
Set wS = Worksheets("仕入表")
With Worksheets("在庫表")
'//E列で「在庫表」Sheetの最終行取得★
lastRow = .Cells(Rows.Count, "E").End(xlUp).Row
'//「在庫表」SheetにデータがあればD列2行目~I列最終行データを一旦消去
If lastRow > 1 Then
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).ClearContents
End If
cnt = 1
For i = 3 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//「仕入表」Sheetの3行目~A列最終行まで
For j = 5 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 2 '//E列~i行最終列まで2行毎★
If wS.Cells(i, j) <> 0 Then '//画像で「0」が表示されているので「0」以外を追加★
cnt = cnt + 1
'//最初のデータ行のみ「仕入表」Sheetの日付をD列に表示★
If j = 5 Then
.Cells(cnt, "D") = wS.Cells(i, "A")
End If
.Cells(cnt, "E") = wS.Cells(i, "B") '//B列に「コード」を表示
.Cells(cnt, "F") = wS.Cells(i, "C") '//F列に「商品名」を表示
.Cells(cnt, "G") = wS.Cells(i, "D") '//G列に「下代」を表示
.Cells(cnt, "H") = wS.Cells(i, j) '//H列に「色」を表示
.Cells(cnt, "I") = wS.Cells(i, j + 1) '//I列に「数」を表示
End If
Next j
Next i
'//最後にD列の表示形式(日付)を「在庫表」SheetのA3セルの書式に設定★
.Range("D1", Cells(Rows.Count, 4).End(xlUp)).NumberFormatLocal = wS.Range("A3").NumberFormatLocal
End With
Application.Calculation = xlCalculationAutomatic
End Sub '//この行まで


そこで、また新たにもしできるなら教えていただきたいことが出てきました。
仕入表タブのC列に出荷した商品が出たら「出荷済」と入力していますが(画像ではA列から埋まってますが実際はA~Cは空白にしてます)、”出荷済”にしたときに在庫表タブの同じ品番の商品すべて(日付~すべての色の個数まで)を黄色の色付けにすることはできますか?
もしできるとすごく楽になるのですが・・・
それではよろしくお願いします。

いつもこちらで皆さんに助けていただいてます。昨日質問しましたが画像が張り付けられていなかったので再度質問です。

”仕入表”タブに入力されたデータが横並びのデータです。
例えば、商品コード/品名/価格/色/入荷数 の並び順で、入力されています。一つの品番に対して色数は1から10個あり、色/入荷数/色/入荷数という風に構成されてます。

そこでこちらでお世話になり、仕入表に入力したデータを縦並びに色別で”在庫表”タブに表を作れるようなVBAを教えていただきました。

画像の仕入表は上の表で...続きを読む

Aベストアンサー

No6です。
以下の箇所を修正しました。前回のマクロをこれで入れ替えてください。
1)エラー13で型が一致しません。・・・この対策
色の箇所が0以外なら処理しているのを、空白以外なら処理するようにしました。
2)今更ですが黄色の色付けを日付の列だけにすることは可能でしょうか。
日付の列だけ黄色にしました。
-------------------------------------------------------
Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Dim wns As Worksheet
Application.Calculation = xlCalculationManual
Set wS = Worksheets("仕入表")
Set wns = Worksheets("納品仕訳")
Worksheets("在庫表").Activate '追加
With Worksheets("在庫表")
'//E列で「在庫表」Sheetの最終行取得★
lastRow = .Cells(Rows.Count, "E").End(xlUp).Row
'//「在庫表」SheetにデータがあればD列2行目~I列最終行データを一旦消去
If lastRow > 1 Then
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).ClearContents
.Range(.Cells(2, "D"), .Cells(lastRow, "I")).Interior.Pattern = xlNone
End If
cnt = 1
For i = 3 To wS.Cells(Rows.Count, "A").End(xlUp).Row '//「仕入表」Sheetの3行目~A列最終行まで
For j = 5 To wS.Cells(i, Columns.Count).End(xlToLeft).Column Step 2 '//E列~i行最終列まで2行毎★
If wS.Cells(i, j) <> "" Then '//画像で「0」が表示されているので「0」以外を追加★ '修正
cnt = cnt + 1
'//最初のデータ行のみ「仕入表」Sheetの日付をD列に表示★
If j = 5 Then
.Cells(cnt, "D") = wS.Cells(i, "A")
End If
.Cells(cnt, "E") = wS.Cells(i, "B") '//B列に「コード」を表示
.Cells(cnt, "F") = wS.Cells(i, "C") '//F列に「商品名」を表示
.Cells(cnt, "G") = wS.Cells(i, "D") '//G列に「下代」を表示
.Cells(cnt, "H") = wS.Cells(i, j) '//H列に「色」を表示
.Cells(cnt, "I") = wS.Cells(i, j + 1) '//I列に「数」を表示
If wns.Cells(i + 2, "C").Value = "出荷済" Then
.Range("D" & cnt).Interior.Color = 65535 '修正
End If
End If
Next j
Next i
'//最後にD列の表示形式(日付)を「在庫表」SheetのA3セルの書式に設定★
.Range("D1", Cells(Rows.Count, 4).End(xlUp)).NumberFormatLocal = wS.Range("A3").NumberFormatLocal
End With
Application.Calculation = xlCalculationAutomatic
End Sub '//この行まで
-------------------------------------

No6です。
以下の箇所を修正しました。前回のマクロをこれで入れ替えてください。
1)エラー13で型が一致しません。・・・この対策
色の箇所が0以外なら処理しているのを、空白以外なら処理するようにしました。
2)今更ですが黄色の色付けを日付の列だけにすることは可能でしょうか。
日付の列だけ黄色にしました。
-------------------------------------------------------
Sub Sample4() '//この行から
Dim i As Long, j As Long, cnt As Long, lastRow As Long, wS As Worksheet
Dim wns As Works...続きを読む

Qプログラムの改良

人の作ったプログラムを改良することになりました。
Visual C++ は初めてですが、CやC++は一通り勉強しています。

そこで、いろいろ調べているのですが、
例えば
「MFCは使わずに,Win32API SDKを用いた方法」
などという説明があります。

自分が対応しているプログラムが、そのどちらであるか、あるいはほかの方法で作られているか
というのはどうしたら分かるのでしょうか?

Aベストアンサー

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが対応するプログラムが
きちんとWin32のみで、もしくはMFCのみで書かれているとは限らないですからね
適当に作られて、両方が混在している可能性だってありますし

Q3.そこからですか
そこは調べればすぐ出てくるかと思いますが
MFCというのはWin32をラッピングしたものです

Q4.作った本人に聞く
仕様書とかがあるならそれを見る

No1です
私はC++は全然触ったこと無いので
あまり的確な回答は期待しないでくださいね

Q1.いいんじゃないでしょうか?
MSDNのOnPoint↓
https://msdn.microsoft.com/ja-jp/library/01c9aaty.aspx

OnPointクラス(Cwndクラス)
https://msdn.microsoft.com/ja-jp/library/1xb05f0h.aspx
このページの一番最初に
「Microsoft Foundation Class ライブラリにあるすべてのウィンドウ クラスの基本機能が用意されています。」と書いてありますから
そういうことですね

Q2.なんでもいいと思いますけど
そもそもあなたが...続きを読む

Q解雇され無収入なのに市民税が一年分で5万円も…貯金も無く払えそうにありません

解雇され無収入なのに市民税が一年分で5万円も…貯金も無く払えそうにありません。
放置するしかありません、督促も再三来ていますが無い物は有りません。
差し押さえしますよ!と言われたのでじゃあしてくださいと言えば、
自主的にお願いしますと言われ…。
貯金ゼロ、無職、借金150万円どうにもなりません。
どうしたらいいですか?
これからどうなりますか?

というか、住所が有るから市民税を払わないといけないんですよね?
住所不定になったら税金を払わなくて済みますか?
住所不定のデメリットはありますか?

Aベストアンサー

払って下さい
払えるのなら

無ければ、自己破産ですね

Qプロシージャの実行方法

Access2016を使用しています。
例えば添付画像のようなフォーム(フォーム1)を作り、非連結のテキストボックス「T_F1」と
「T_F2」、そして「登録」ボタンを配置したとします。
登録ボタンをクリックすると内容をテーブルに追加し、T_F1 と T_F2 をクリアするという動きを
させる場合、以下のようにコードを書いてみました。

Private Sub BT_登録_Click()
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Set DB = CurrentDb
 Set RS = DB.OpenRecordset("TB1", dbOpenDynaset)
 RS.AddNew
  RS.Fields(0) = Me.T_F1
  RS.Fields(1) = Me.T_F2
 RS.Update
 RS.Close: Set RS = Nothing
 DB.Close: Set DB = Nothing
 Call S_clear
End Sub
------------------------------------
Private Sub S_clear()
 Me.T_F1 = Null
 Me.T_F2 = Null
End Sub
------------------------------------

ここで S_clear() の動作テストを行いたいのですが、「F5」や VBAメニューバーの
[実行(R)]-[Sub/ユーザーフォームの実行] ではマクロを選択するウインドウが
開きますが、何も選択することが出来ません。

試しに 「Public Sub S_clear()」にしてみても同様でした。
標準モジュールに記述すれば「F5」で動作確認ができるのですが、
この様な場合の動作確認はどのように行えばよいのでしょうか?

Access2016を使用しています。
例えば添付画像のようなフォーム(フォーム1)を作り、非連結のテキストボックス「T_F1」と
「T_F2」、そして「登録」ボタンを配置したとします。
登録ボタンをクリックすると内容をテーブルに追加し、T_F1 と T_F2 をクリアするという動きを
させる場合、以下のようにコードを書いてみました。

Private Sub BT_登録_Click()
 Dim DB As DAO.Database
 Dim RS As DAO.Recordset
 Set DB = CurrentDb
 Set RS = DB.OpenRecordset("TB1", dbOpenDynaset)
 RS.AddNew
...続きを読む

Aベストアンサー

フォーム内に適当なボタンを一つ作り、クリック時イベント(コード)を Call S_clear とだけ記述すればいいのでは?

T_F1とT_F2に適当な数値や文字を入れ、そのボタンを押すと動作確認できるはずです。

メンドクサイなら、現在のコードでCall S_clearの直前・直後などにメッセージボックスを出すようにしておくのも良いと思います。うまく動作したらRemするなり、削除すればよいのだし。

Qルーター

現在、ルーターWHR-1166DHPを使っています。
家族4人 PC4台 スマホ4台 ゲーム1台をwi-fiに接続しています。

木造2階のネットがちょくちょく接続が切れます。

ルーターをWSR-2533DHPに変更すれば改善されるでしょうか?
現状、WSR-2533DHPを上回るルーターは存在しませんか?

Aベストアンサー

こんばんは

WSR-2533DHPにしても現状子機が対応していないので、殆ど速度も距離も変わらないです。
なので2階で途切れなくするのには向いていないですね、

解決策としてはルーター置き換えではなく中継になると思います。
WSR-2533DHPでも出来ますが、スペック的にWHR-1166DHPとバランスが取れなく無駄なので、
バランスや接続数を考えて、同時接続数10台が推奨で安定しているこのあたりが手頃でオススメです。
http://kakaku.com/item/K0000958468/

今お使いのWHR-1166DHPと上記WG1900HPを交換し、
WG1900HPのちょうど真上(2階)の部屋にWHR-1166DHPを移動し中継機設定。
これで2階でも安定して通信できるようになると思います。

参考になれば。

Q【VBA】ボタンで実行するとうまく作動しません。

はじめまして。
皆様のお知恵を貸してください!

【1.やりたいこと】
キーを検索し、該当するものがなくなるまで印刷をかけたい

【2.エクセルの中身】
シートは全部で2つあり、①データ ②1)定期 という名前にしてあります。
①データシートに個人情報を入力する欄を設けてあり、A~L列までの表になっています。
K列に1または2の数字を入れており、これをキーとし、1ならA列を参照し、 ②1)定期シートのS4セルに貼り付けてVLOOKUPして印刷、これをキーがなくなるまで連続印刷したいのです。

そこで、以下のように設定してみました。
しかし、VBAのSub/ユーザーフォームの実行(F5)では連続で印刷をかけてくれるのですが、
ボタンにマクロを登録し、ボタンをクリックしてみると、1つしか印刷をかけてくれません。
(VBAのSub/ユーザーフォームの実行(F5)でやっても完璧とは言えず、上から順番に印刷されず、ばらばらに印刷されます。。。)

どうすれば理想どおりに実行できるようになりますでしょうか。
ご教授いただきたくお願い申し上げます。

↓↓

Sub 定期個人票()

Dim sh As Worksheet, i As Long

Set sh = Worksheets("1)定期")
Set FoundCell = Range("$K$3:$K2000").Find(What:=1)

If FoundCell Is Nothing Then
MsgBox "定期受診者なし"
Exit Sub
Else
Set FirstCell = FoundCell
On Error Resume Next
FoundCell.Offset(0, -10).Copy
sh.Range("$S$4").PasteSpecial Paste:=xlPasteValues
sh.PageSetup.PrintArea = Range("$A$1:$Q$52").Address
sh.PrintOut
End If

Do
Set FoundCell = Range("$K$3$K2000").FindNext(FoundCell)
If FoundCell.Address = FirstCell.Address Then
Exit Do
Else
On Error Resume Next
FoundCell.Offset(0, -10).Copy
sh.Range("$S$4").PasteSpecial Paste:=xlPasteValues
sh.PageSetup.PrintArea = Range("$A$1:$Q$52").Address
sh.PrintOut
End If

Loop

End Sub

はじめまして。
皆様のお知恵を貸してください!

【1.やりたいこと】
キーを検索し、該当するものがなくなるまで印刷をかけたい

【2.エクセルの中身】
シートは全部で2つあり、①データ ②1)定期 という名前にしてあります。
①データシートに個人情報を入力する欄を設けてあり、A~L列までの表になっています。
K列に1または2の数字を入れており、これをキーとし、1ならA列を参照し、 ②1)定期シートのS4セルに貼り付けてVLOOKUPして印刷、これをキーがなくなるまで連続印刷したいのです。

そこで、以...続きを読む

Aベストアンサー

コードの中身はよく見てませんが、VBAの動く速さでプリントアウトが可能な環境ですか?
プリントアウトをブレークポイント等で止めながら動かすとどうなりますか?

QΣの計算について質問があります

Σ(k=1→n)1/2{3^(k-1)+1)}
=1/2{(3^n-1)/(3-1)+n}
=1/4(3^n+2n-1) 答えがこう書いてあるのですが、
Σ(k=1→n)1/2{3^(k-1)+1)}
=1/2[{3^(n-1)-1}/{(3-1)}+n]なぜこうならないのでしょうか? 誰か教えて下さい(--;)

Aベストアンサー

k=0の時3^(k-1)=1ですね。
k=nの時3^(n-1)ですね。
初項が1で公比が3の等比数列の項がn個あります。
☆ここじゃないでしょうか?
 n-1乗までですが、項の数はn-1ではなくnです。
公式に当てはめると、
1*(3^n-1)/(3-1)となります。

Qマクロの「SaveAs」でエラーが出るのを解消したいです

下記の↓↓↓↓↓↓部分でエラーが出ます。

「実行時エラー '1004':

'SaveAs' メソッドは失敗しました: '_Worksheet' オブジェクト」

ちょろちょろマクロ組んでたのですが単純な
エラーで解決が出来ない状態です。
どなたかマクロ先生に教えて頂ければと思いますので
よろしくお願いします。

'指定額の抽出
Private Const MESSAGE_FINISH = "予算出力処理が完了しました"

Sub 予算データテキスト出力()
Dim ws1
Set ws1 = Worksheets("チェック一覧")
Dim m As Long
m = 3
Dim ws2
Set ws2 = Worksheets("予算データ")

Dim sm As String

Dim ws3

Dim sn

'チェック一覧シートのNo.が無くなるまで処理する
Do Until ws1.Cells(m, 1) = ""

Application.ScreenUpdating = False


If ws1.Cells(m, 4) = "" Then
'ナンバーがある場合は部門等をチェック一覧(ws1)→フォーム(ws2)に転記する
Else
ws2.Cells(2, 2) = ws1.Cells(m, 4)

'各部署のシート名をsmにセットする
sm = ws1.Cells(m, 2)
Set ws3 = Worksheets(sm)

'予算フォーム(ws2)の行変数「s」と各部署シート(ws3)の行変数「n」
Dim s
s = 4
Dim n
n = 9
Dim cnt
cnt = 1

Do Until n = 44
If ws3.Cells(n, 23) = 0 Then

'各数値等を各部署のシート(ws3)→フォーム(ws2)に転記する
Else

ws2.Cells(s, 1) = cnt
ws2.Cells(s, 3) = 6100
ws2.Cells(s, 4) = 0
ws2.Cells(s, 5) = ws3.Cells(3, 4)
ws2.Cells(s, 6) = ws3.Cells(5, 8)

ws2.Cells(s, 7) = ws3.Cells(n, 4)
ws2.Cells(s, 8) = ws3.Cells(n, 24)
ws2.Cells(s, 9) = ws3.Cells(n, 25)
ws2.Cells(s, 10) = ws3.Cells(n, 26)
ws2.Cells(s, 11) = ws3.Cells(n, 27)
ws2.Cells(s, 12) = ws3.Cells(n, 28)
ws2.Cells(s, 13) = ws3.Cells(n, 29)
ws2.Cells(s, 14) = ws3.Cells(n, 31)
ws2.Cells(s, 15) = ws3.Cells(n, 32)
ws2.Cells(s, 16) = ws3.Cells(n, 33)
ws2.Cells(s, 17) = ws3.Cells(n, 34)
ws2.Cells(s, 18) = ws3.Cells(n, 35)
ws2.Cells(s, 19) = ws3.Cells(n, 36)
s = s + 1
cnt = cnt + 1

End If

n = n + 1

Loop
'予算データに転記されたので出力する

ws2.Copy

' ↓↓↓↓↓この下の「SaveAs」がエラーになります。↓↓↓↓↓

ActiveWorkbook.SaveAs Filename:="D:\Library\Desktop\新しいフォルダー\" & ws2.Cells(s, 5).Value & ".xlm"

ActiveWindow.Close

ActiveWorkbook.Close savechanges:=False


'フォームに転記した情報をクリア
ws2.Select
Range(Cells(4, 1), Cells(44, 19)).Select
Selection.ClearContents


End If

m = m + 1


Loop

ws1.Select

MsgBox MESSAGE_FINISH

End Sub

下記の↓↓↓↓↓↓部分でエラーが出ます。

「実行時エラー '1004':

'SaveAs' メソッドは失敗しました: '_Worksheet' オブジェクト」

ちょろちょろマクロ組んでたのですが単純な
エラーで解決が出来ない状態です。
どなたかマクロ先生に教えて頂ければと思いますので
よろしくお願いします。

'指定額の抽出
Private Const MESSAGE_FINISH = "予算出力処理が完了しました"

Sub 予算データテキスト出力()
Dim ws1
Set ws1 = Worksheets("チェック一覧")
Dim m As Long
m = 3
Dim ws2
Set ...続きを読む

Aベストアンサー

試していませんが、
ActiveWorkbook.SaveAs Filename:="D:\Library\Desktop\新しいフォルダー\" & ws2.Cells(s, 5).Value & ".xlm"

のファイルの拡張子は、".xlsm"が正しいかと。

Q【水素電池の不思議なルール】 水素電池はプラス側が酸素でマイナス側が水素と決まっている。 なぜマイナ

【水素電池の不思議なルール】


水素電池はプラス側が酸素でマイナス側が水素と決まっている。

なぜマイナス側に酸素だと不味いのでしょうか?

どういう理由でどういう不都合があり利点は何なのか教えてください。

Aベストアンサー

電池とは、自発的に起こる酸化還元反応によって生じたエネルギーを電気エネルギーとして取り出す装置。

水素-酸素燃料電池では 酸素と水素を吹き込んでいるから、
水素が1価の陽イオン(電子を失う)、酸素が2価の陰イオン(電子を得る)になる。

簡略にリン酸型の場合の反応式を書くと
水素:2H2 →4H[+] + 4e[-]
酸素:O2 +4H[+] + 4e[-] →2H2O

電子の動きは水素→酸素になるから、電流としては、酸素→水素

だから、酸素が+側で、水素が-側。


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

人気Q&Aランキング