Quantcast
Channel: OKWAVE 最新質問(Visual Basic/257)【本日】
Viewing all 6510 articles
Browse latest View live

プログラムを終了しても消えない変数

$
0
0
VBAを使っていて ユーザーフォーム上にボタンを二つ配置します。 ボタン1を押すとsub 1が実行されます。 このプログラムで出力された変数を ボタン2で実行するsub 2で使いたいのですが どうすれば良いですか? sub 1の中でcall subを使ってプログラム2を呼び出すということはしたくないのですが このsub を終了しても変数が消えないようにするには ワークシートのセルに代入するか ユーザーフォームのテキストボックスなどに代入するしかないでしょうか? この変数を外に出さずに隠さずに保存しておき 次のsub で使いたいのですが 何か良い方法はないでしょうか?

subを連続で実行する

$
0
0
http://oshiete.goo.ne.jp/qa/8901279.html このページで外部資源を用いないと変数を保存できないことを教えていただきました。 それと関連した別の質問なのですが あるsub 1を実行し、それの終了とともに別のsub 2を実行したいのですが call subを使う方法だと必ずsubの中で別のsubを呼び出すかたちになってしまいます。 subを入れ子にせずに、subを連続で使う方法はありますか? sub 3を作成し、そこにsub1とsub2を入れるというのも無しです。 よろしくお願いいたします。

VBフォームの時間入力

$
0
0
労働時間を計算する入力フォームです。 出勤時間として、 テキストボックス1に(時間)、テキストボックス2に(分)を入力する。 退社時間として、 テキストボックス3に(時間)、テキストボックス4に(分)を入力する。 コマンドボタン1を押してセルA1に出勤時間、B1に退社時間を転記させる。例 13:40 休暇の時は入力はしないので、コマンドボタン1を押して空欄にしたいです。 どなたかエラー処理も含めて教えて下さい。

エクセルVBA

$
0
0
生年月日(F3:F187)から85歳6か月になる人を(I3:I187)に☆を入力する構文を教えてください。 sheet名は入力です。よろしくお願いします

VBでコンボボックスをテーブルのように扱いたい

$
0
0
VB.net 2010での質問です。 外部テキストファイルを読み込んで、フォーム上のコンボボックスに入れるのは簡単にできましたが、 ボタンを押したときに、選んだコンボボックスの該当データのうち一部だけを取り出して他データとからめつつ処理して表示させたいのです。 テキストファイルが以下のようになっています。データ件数は多くはありません。 阿部,北海道,10001,2001/05/01 山崎,東京都,11111,2003/09/25 ボタンを押した時には、別のテキストボックスに 山崎 - 10001 と表示させたいのです。贅沢を言えば、コンボボックスには人名のみが表示されるようにできれば素晴らしいです。 どうかよろしくお願いします。

VBユーザーフォームで時間入力

$
0
0
勤務時間を入力して労働時間を計算するユーザーフォームです。 出勤時間として、 テキストボックス1に(時間)、例えば13と 入力。 テキストボックス2に(分)、例えば40と入力。 退社時間として、 テキストボックス3に(時間)、例えば18と入力。 テキストボックス4に(分)、例えば30と入力。 コマンドボタン1を押して、sheet1のA1セルに出勤時間、B1のセルに退社時間を転記させたい。 A1に13:40 B1に18:30 この様に転記させたいです。 休みの人の場合は、入力しないでコマンドボタン1を押してA1とB1のセルは空欄に したいです。 だれか詳しい方、上記を実行できるコードを教えて下さい。 よろしくお願いします。

Access2013Dir関数について

$
0
0
Access2013でフォームを開くときにDir関数を使い、リンクテーブル先(共有フォルダ)にlaccdbがないかを確認しています。 その際に誰も開いてないのにファイル存在有と出てしまうのですが、どうしてでしょうか。 また、laccdb確認をせずに意図的にリンクテーブルの元ファイルを開きlaccdbを作った状態でテーブル更新などを行いましたが、排他的エラーのメッセージが出ませんでした。ldbの時はうまくいったのですが、どうすればlaccdbを確認できますでしょうか。 何人かで共有するシステムのデータテーブルなので競合をスルーしてしまうと運用するのが怖く質問させていただきました。

VBAの構文をご指導お願いいたします

$
0
0
EXCELでシフト表を作成していますが次の操作をVBAで処理したいと考えていますが初心者で難しく教えて頂きたく宜しくお願いいたします。 1.sheet1でB1~AF1に日付、A2~A15に名前、日ごとに担当者を決め役割を記号(1)、(2)、(1)、(2)、等の記号をセルに入れてAさんは1日には(1)2日は(2)とこんな感じでシフト表を作成しています 2.Sheet2のB1~AF1に日付、A2に(1)、A3に(1)、A4に(2)~と記号を入れ、シフト表の逆で例えば1日の(1)は誰が担当者かを分かるようにSheet1のシフト表からSheet2のセルに担当者を代入する表を作りたいのです(ここの構文を教えて頂きたい)。Range("A1").Valueでお願いしますRC形式だと分からないのです勝手で説明が下手ですいません、何卒宜しくお願いたします。

EXCEL・VBAでの検索ダイアログのクリア

$
0
0
一番目のマクロで Application.SendKeys ("^f") として検索ダイアログを表示し、 マクロ終了後、手動で検索ダイアログを利用した後、 二番目のマクロの頭で、表示中の検索ダイアログを消そうとして Application.SendKeys "{ESCAPE}" と記述しました。しかしダイアログは消えず、マクロも進みません。 検索ダイアログの消し方を教えていただけないですか。 ================================================

VBA; ユーザーフォームからの処理

$
0
0
Excel 2007を使用しています。 下記のようなことを考えています。 1. テキストボックスにYYYY/M形式の日付データを入力 2. コマンドボタンを押下。 3. 日付データを確認 4. オリジナル(sheet1)の列値、日付データ(A列)、商品番号(B列)、商品名(C列)から条件に 該当した行をサマリー(sheet2)にコピー。 オリジナルの3行目のベッダー情報は先頭に置いて、その下に該当行を付ける。 オリジナルデータ; 注文日付商品番号商品名 2010/9312000 ノコギリ 2011/12   542000ハンマー ... ... 2014/5312000 ノコギリ サマリー; 注文日付商品番号商品名 2010/9312000 ノコギリ 2014/5312000 ノコギリ ご質問; 1. 上記3、4の処理はコマンドボタンのクリックイベント処理として、まとめて 記述すれば 良いのでしょうか? 2. 日付データのオブジェクト名を"TextBox1"として、コマンドボタンのクリックイベント処理 など、これらの処理を行うにあたりサンプルなるコードはありませんか?   オリジナルの行数は変動します。 3. ユーザーフォームを作らずにシート上(shhet1)にテキストボックス、 コマンドボタンを作成できますか?   ありましたら方法を教えてください。 以上、宜しくおねがいします。

VBA; ユーザーフォームからの処理 - 2

$
0
0
申し訳ございませんが、質問させてください。 eden3616さん、補足入力できなかったので再質問しています Excel 2007を使用しています。 下記のようなことを考えています。 1. テキストボックスにYYYY/M形式の日付データを入力 2. 実行ボタンを押下。 3. 日付データを確認 4. オリジナルシート、日付データ(A列)、商品番号(B列)、商品名(C列)、購入状況(D列)から条件に   該当した行をサマリーシートにコピー。   オリジナルの3行目のベッダー情報は先頭に置いて、その下に該当行を付ける。 オリジナル; 注文日付商品番号商品名購入状況 2010/9312000 ノコギリ 未着手 2011/12   542000ハンマー   購入済み ... ... 2014/5312000 ノコギリ   n/a サマリー; 注文日付商品番号商品名購入状況 2011/12   542000ハンマー   購入済み (1)前提条件 ・ブック名は「商品検索」。  シート名は「オリジナル」、「実行」、「サマリー」(出力先)があり、  ボタン操作は実行シートで行います。 ・オリジナル3行目に項目行が1行あり、4行目からデータが入力されています。 ・オリジナルの行数は常に変動しますのでサマリーシートは1行目に項目行(1行)、2行目から  行コピーして貼り付けます。 (2)ボタン処理 検索条件は入力されたYYYY/M形式の日付データ(A列)以前、購入状況(D列)で状況が"入荷済み"もしくは"手配中"以外の行をリストします。 質問; コンパイルエラー(型が一致しません)が解けません。 アドバイスとサンプルをいただけませんか? あと、シートが無い等のエラー処理はどのような処理になりますか? Private Sub CB1_Click() '変数を定義 Dim i As Long Dim maxRow As Long Dim cnt As Long Dim inSheet As Worksheet Dim outSheet As Worksheet '入出力先のシートをオブジェクト変数へ格納 Set inSheet = Worksheets("オリジナル") Set outSheet = Worksheets("サマリー") 'テキストボックスの内容を判定 If (Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value = "") Or _  (Not IsDate(Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value)) Then MsgBox "日付が正しく入力されていません" Exit Sub End If '最終行番号を取得 maxRow = inSheet.Cells(Rows.Count, "A").End(xlUp).Row 'オリジナルシートの最終行番号で分岐処理 If maxRow > 3 Then '出力先を削除してヘッダーをコピー outSheet.Cells.Delete inSheet.Range("A3").EntireRow.Copy outSheet.Range("A1") Application.CutCopyMode = False Else '4行目以降にデータが入力されていなければメッセージで終了 MsgBox "該当データがありません" Exit Sub End If '4行目から最終行まで繰り返し For i = 4 To maxRow 'J列が日付であれば処理 If IsDate(inSheet.Cells(i, "A").Value) Then 'テキストボックスの年/月以前とA列、オリジナルシートのD列(購入状況)が入荷済み、手配中以外で一致した行をコピー If Year(inSheet.Cells(i, "A").Value) <= Year(Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value) And _ Month(inSheet.Cells(i, "A").Value) <= Month(Workbooks("商品検索.xlsm").Worksheets("実行").TextBox1.Value) And _ inSheet.Cells(i, "D").Value <> "入荷済み" Or "手配中" Then'←ここでコンパイルエラーになります。 inSheet.Rows(i).Copy outSheet.Rows(cnt + 2, "A") cnt = cnt + 1 End If End If Next i '結果表示 If cnt > 0 Then MsgBox cnt & "件、該当しました" Else MsgBox "該当データがありません" End If End Sub

シートに張り付けたボタンがシートのコピーで消える。

$
0
0
Excel2003で作成した図書館員の当番表でマクロで当番表を自動作成させています。 サンプルとして用意した当番表のシートを実際の月当番表を作成するときに、シートのコピーをして作成します。シートはコピーされたのですが、そのシートに張り付けた印刷ボタン(クリックすると自動印刷)が今まで一緒にコピーされたのですが、コピーされません。 マイクロソフトの前回の問題と関係するのでしょうか? コピーされていた古いファイルでしても同様です。

VBAで、選択範囲の合計を表示するマクロを作りたい

$
0
0
あるセル範囲(例えばB1:G1)にそれぞれ数値が入力されていたとします。 入力ダイアログでその範囲を指定し、その範囲内の数値の合計値を表示するマクロを作りたいのですが、やり方が分かりません。 セル範囲を入力させるプログラムはこれで合っていますか? Sub セル範囲の合計() Dim 範囲 As Range 範囲 = appllication.InputBox(prompt:="セル範囲は?", Title:="セル範囲", Type:=8) End Sub ここからどのように変えればいいでしょうか?

Access VBAで複数行を1行にする方法

$
0
0
いつも参考にさせていただいています。 今回、新規の注文を受けることになり、データフォーマットを見せてもらったのですが、 ヘッダーと明細情報の1:Nになっていました。 これを1行づつにしたいのですが、明細行にヘッダー行とのキーになる項目がありません。 いろいろ試してみましたが、うまくいきませんでした、ご教授していただければ幸いです。 データ 項目1 項目2 項目3    項目4  項目5 1   会社名 送付先住所 担当者名 連絡先 2   品名  数量    備考 上記をこうしたいです。 項目1 項目2 項目3    項目4  項目5   項目6  項目7  項目8 1   会社名 送付先住所 担当者名 連絡先   品名   数量  備考  

アクティブなIEのタブをVBAで掴む

$
0
0
いつもお世話になっております。 アクティブになっているIEのタブを掴むコード作りました。 ユーザーフォームにマクロを登録したボタンを配置して使っています。 WIN32APIのFindWindow関数でアクティブなIEを掴み、 アクティブなIEのタブでないと、ステータスバーに 文字を入力できないことを利用してアクティブなタブを識別しています。 基本的にはちゃんと動くのですが、時折アクティブなタブではなく、 一番左にあるタブを補足してしまいます。 もしくはIEを補足できずNot Foundになります。 ハンドルは必ず取得できているので、問題があるとすれば コード内の★★★より下だと思います。 Not Foundになるのは(1)の部分でどのタブの ステータスバーにも文字が代入されないことが原因でした。 一番左のタブを掴んでしまうときも、(1)の部分で アクティブなタブではなく、一番左のタブの ステータスバーに文字が入ってしまい、 それを掴んでいるようです。 タブが複数あるIEのウィンドウを複数立ち上げていることが多いのですが、 タブの開き方の問題なのか(特定の開き方をするとステータスバーを読まない?)、 原因が分かりかねている状況です。 ステータスバー云々はあんまり信頼性が高く無さそうな気がするのですが、 これ以外に何か確実にタブを掴む方法があればご教授ください。 もしくはこのコードを改良する方法があれば教えていただけると助かります。 よろしくお願いいたします。 WIN7 IE9 エクセル2010 Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Sub IEfind() Dim ie As Object Dim hwnd As long hwnd = FindWindow("IEFrame", vbNullString) For Each ie In CreateObject("Shell.Application").Windows() If hwnd = ie.hwnd Then  ’★★★ If ie.StatusBar = False Then ie.StatusBar = True ie.statusText = CStr(hwnd)’---(1) If ie.statusText = CStr(hwnd) Then Exit For End If Next If IsEmpty(ie) Then MsgBox "Not Found" Else MsgBox ie.LocationURL ’若しくは他の処理 End If End Sub

ExcelVBA セルの文字の取得

$
0
0
Excel2010 VBAについてご教授願います。 あるセルに以下の様な内容が有ったとします。 (数字の部分は変動しますが、数字5桁+「-」+数字3桁+「-」数字3桁の  フォーマットとします。  改行も変動します。) セルの内容 12345-678-001 あああ。(改行) 12345-678-002 いいいいい12345-678-003ううう。(改行) 23456-789-010 えええ。23456-789-011 おおおおおおお(改行) 34567-890-123 かか 上記から以下の様なレイアウトで文字を取得したいと思います。 Split関数等を使用すればできるのかな、とも思いますが、 どの様に作成したらよろしいのか分かりません。 次のデータの ニューメリック5桁 - ニューメリック3桁 - ニューメリック3桁のレイアウトが 発生した時点でニューメリックのデータから前の文字までを取得するという 方法が取れればよろしいでしょうけれども、これが出来ないという事であれば 判定する方法とすれば、数字部分を変数等で与える事になろうかと思いますが、 この数字部分も変動します。 12345-678-001 あああ。 12345-678-002 いいいいい 12345-678-003ううう。 23456-789-010 えええ。 23456-789-011 おおおおおおお 34567-890-123 かか

テキストボックスの日付と文字列の処理

$
0
0
Excel 2007 VBAを使用しています。 下記のようなことを考えています。 1. テキストボックスにyyyy/m形式の日付データを入力 2. ボタンシートのコマンドボタンを押下。 3. テキストボックスの日付データを確認 4. 商品シートの列値、日付データ(A列)、商品番号(B列)、商品名(C列)、状況(D列)から条件に 該当した行を結果シートに行コピー。   ただし、日付データ(A列)には日付データ以外にも文字列データ、"未定"、空白セル("")などがございます。 そして、商品シートの3行目のベッダー情報は先頭に置いて、その下に該当行を行コピーしていく。 質問; 解らないのは、同じif文で日付データと文字列データとの処理です。 テキストボックスのyyyy/m形式の日付データを基にその日付以降の該当する行を別のシートに コピーしていくのですが、参照元の商品シートの日付データ(A列)には他に文字列データが存在します。 この文字列データも抽出の対象にしたいのです。 あと、テキストボックスのyyyy/m形式の日付データは半角入力しますが全角入力されたとき エラー表示させる方法はありますか? これらの処理を行うにあたりサンプルなるコードはありませんか? 商品シートの3行目のベッダー情報は先頭に置いて、その下に該当した行を行コピーしていく。 1. 商品シート; 注文日付商品番号商品名状況 2010/9312000 ノコギリ受取済み 2014/5    542000ハンマーn/a 未定 544000トンカチn/a (空白セル)542000ハンマーn/a 2014/11312000 ノコギリ注文中 ・ ・ 2. ボタンシートで、日付データを入力(2014/5)、実行ボタンを押下。 条件は2014/5以降で、状況が"受取済み"、"注文中"以外の行データをコピーして状況が未確定のリストを作成します。 そして、注文日付が"未定"、空白セル("")の行データもコピーします。 そして、順次、結果シートに行コピーしてします。 結果シート; 注文日付商品番号商品名状況 2014/5    542000ハンマーn/a 未定 544000トンカチn/a (空白セル)542000ハンマーn/a ・ ・ VBAコード; Option Explicit Private Sub CB2_Click() '変数を定義 Dim i As Long Dim maxRow As Long Dim cnt As Long Dim inSheet As Worksheet Dim outSheet As Worksheet '入出力先のシートをオブジェクト変数へ格納 Set inSheet = Worksheets("商品シート") Set outSheet = Worksheets("結果シート") 'テキストボックスの内容を判定 '全角入力されたときエラー表示させる方法はありますか? If (Me.TextBox1.Value = "") Or (Not IsDate(Me.TextBox1.Value)) Then MsgBox "日付が正しく入力されていません" Exit Sub End If maxRow = inSheet.Cells(Rows.Count, "A").End(xlUp).Row '商品シートの最終行番号で分岐処理 If maxRow > 3 Then '出力先を削除してヘッダーをコピー outSheet.Cells.Delete inSheet.Range("A3").EntireRow.Copy outSheet.Range("A1") Application.CutCopyMode = False Else '4行目以降にデータが入力されていなければメッセージで終了 MsgBox "該当データがありません" Exit Sub End If '4行目から最終行まで繰り返し For i = 4 To maxRow 'ここからが上手くいきません。 'If IsDate(inSheet.Cells(i, "A").Value) Then 'フィルター条件; 'A列 注文日付 → 2014年05月以降、未定、(空白セル) 'D列 金額 → 受取済み、注文中以外 If inSheet.Cells(i, "A").Value >= CDate(Me.TextBox1.Value) And _ CStr(inSheet.Cells(i, "A").Value) = "未定" And _ CStr(inSheet.Cells(i, "A").Value) = "" And _ CStr(inSheet.Cells(i, "D").Value) <> "受取済み" And _ CStr(inSheet.Cells(i, "D").Value) <> "注文中" Then inSheet.Rows(i).Copy outSheet.Rows(cnt + 2) cnt = cnt + 1 End If 'End If Next i End Sub

隠していたユーザーフォームを再び表示したい

$
0
0
ExcelVBA をExcel2007で苦戦している初心者です。 マクロ記載のAブックとBブックを使っています。 Aブックのユーザーフォーム「表紙」にあるボタンをクリックして Private Sub CommandButton11_Click() 表紙.Hide Workbooks.Open Filename:=ThisWorkbook.Path & "\改善案.xlsm" Sheets(1).Select End Sub Bブック(改善案)に飛び、作業後これを閉じ、Aブックに戻したいです。 Aブックは、まだ閉じてはいません。 同時に、ユーザーフォーム「表紙」を再表示したいです。 Private Sub CommandButton2_Click() Unload UserForm1 Application.DisplayAlerts = False ThisWorkbook.Close Application.DisplayAlerts = True 表紙.show End Sub すると次のエラーが表示され 「コンパイルエラー 変数が定義されていません」 表紙.showの表紙が反転表示されます。 Aブックに戻ったときにユーザーフォーム「表紙」を表示するには どうしたらよろしいでしょうか。よろしくお願いします。

空白セルの記述方法

$
0
0
Excel VBAで日付データがA列、通貨データがB列にあるとして シート1のセル(A:1)、セル(B:2)が空白セルとして条件式を作りたいのですが記述方法はどのようになりますか? 下記でよろしいでしょうか? If CDate(sheet1.cell(A:1).value) = Empty then If CCur(sheet1.cell(B:1).value) = Empty then

DataRepeater上のチェックボックス

$
0
0
VB2013にてデスクトップアプリを作成しています。 フォーム上にVBPowerPack12のDataRepeaterを配置し、その上にラベル、チェッ クボックスを配置しています。 チェックボックスを2個配置(フラグ1、フラグ2とします)した場合に変わっ た動作をしているため困っています。 データバインドし一覧表示させ、 1)1行目のフラグ1をクリック->1行目のフラグ2をクリック 2)2行目のフラグ1をクリック・・・・・>この時点で1行目のチェックされ ていたフラグ2のチェックが勝手に外されてしまう このような現象に遭遇された方はおられないでしょうか? 最初は開発中のアプリで困っていたのですが、試に単純なプログラムで試しても 同じ現象でした。 よろしくお願いします。 【環境】 Windows7SP1 VisualStudioCommunity2013Update4 VisualBasicPowerPacks12.0
Viewing all 6510 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>