Visual Basic
- VBAでIFの複数条件がうまく動きません。
エラー表示がなくローカルでも見れませんでした。 修正箇所が分からずにいます。 詳しい方教えてください。 何卒よろしくお願いいたします。 ※S、T列に★は入るのですがA列の条件(10000以下)やS列の条件(空白以外)を無視して★が入っています。 作業内容 '(1)A列<従業員ID>のフィルターを数字フィルターで10000以上に設定 '(2)I列<所属>のフィルターを「秋田・長野・栃木・本社」以外に設定 '(3)L列<就労状況>のフィルターを「退職」以外に設定 '(4)M列<勤務形態>のフィルターを「常勤」以外に設定 '(5)S列<資格者>のフィルターを「(空白)」に設定 '(6)J列<エントリー時の保有資格>のフィルターを「aaa・bbb・ccc・ddd」に設定 For r = Cells(Rows.Count, 1).End(xlUp).Row To 4 Step -1 If Cells(r, "A") >= 10000 And _ Not Cells(r, "I") Like "*秋田*" Or Not Cells(r, "I") Like "*長野*" Or _ Not Cells(r, "I") Like "*栃木*" Or Not Cells(r, "I") Like "*本社*" And _ Not Cells(r, "L") Like "退職" And _ Not Cells(r, "M") Like "常勤" And _ Cells(r, "S") Like "" And _ Cells(r, "J") Like "*aaa*" Or Cells(r, "J") Like "*bbb*" Or Cells(r, "J") Like "*ccc*" Or Cells(r, "J") Like "*ddd*" Then Cells(r, "S") = "★" Cells(r, "T") = "★" End If Next r End Sub
- ベストアンサー
- Visual Basic
- emimaru888
- 回答数2
- VBEを開く時のコマンド名
VBEについての質問です。 ExcelでVBAを記述する時に,VBEを開くと思いますが,Excelの開発タブから 「Visual Basic」というコマンドをクリックすると思いますが VBEを開くのに,なぜコマンドの名称は「Visual Basic」なのでしょうか?
- 締切済み
- Visual Basic
- kirakira_star_
- 回答数2
- 列の表示非表示をするマクロ
C列とE列が非表示ならば再表示 表示されていれば非表示になるマクロを設定したいです。 このマクロを正しくするにはどうすればいいですか? Sub 再表示また非表示() If Columns("C:C,E:E").Hidden = True Then Columns("C:C,E:E").Hidden = False Else: Columns("C:C,E:E").Hidden = False Columns("C:C,E:E").Hidden = True End If End Sub
- ベストアンサー
- Visual Basic
- terabayahi1988
- 回答数4
- ExcelのVBAで複数行を転記する方法について
いつもお世話になります。YouTubeで変数を使わない複数行を纏めて転記する内容を見ました。”C10~H12セルの値をL10~Q12セルへ出力する" <Range("L10:Q12"):Value=Range("C10:H12"):Value> で一行で纏められる例題が出ていました。そこで私が作っている変数入りの複数行を一行で書く方法を教えてください。 ””””私の作ったプログラムです””””” Sub 領収証班別() '出力行を設定する変数の定義 Dim CtrRow '繰返し処理用の変数定義 Dim i '------------------------------------------------------------------------------ '出力行の開始位置を設定 CtrRow = 2 '2行目から62行目まで繰り返す For i = 2 To 62 'B(領収証の班別)に指定班名が合致しているか判定する If Worksheets("領収証").Range("B" & i).Value = "南1班" Then 'Worksheets("領収証班別").Range("A" & CtrRow).Value = Worksheets("領収証").Range("A" & i).Value 'Worksheets("領収証班別").Range("B" & CtrRow).Value = Worksheets("領収証").Range("B" & i).Value 'Worksheets("領収証班別").Range("C" & CtrRow).Value = Worksheets("領収証").Range("C" & i).Value 'Worksheets("領収証班別").Range("D" & CtrRow).Value = Worksheets("領収証").Range("D" & i).Value 'Worksheets("領収証班別").Range("E" & CtrRow).Value = Worksheets("領収証").Range("E" & i).Value '1行出力したため、出力行の位置を+1にする CtrRow = CtrRow + 1 '判定処理の終了 End If '繰り返し処理の終了 Next i '------------------------------------------------------------------------------ '出力行の開始位置を設定 CtrRow = 24 '2行目から62行目まで繰り返す For i = 2 To 62 : : 次から次へと続きます。 と云うようなプログラムの中で 'Worksheets("領収証班別").Range("A" & CtrRow).Value = Worksheets("領収証").Range("A" & i).Value 'Worksheets("領収証班別").Range("B" & CtrRow).Value = Worksheets("領収証").Range("B" & i).Value 'Worksheets("領収証班別").Range("C" & CtrRow).Value = Worksheets("領収証").Range("C" & i).Value 'Worksheets("領収証班別").Range("D" & CtrRow).Value = Worksheets("領収証").Range("D" & i).Value 'Worksheets("領収証班別").Range("E" & CtrRow).Value = Worksheets("領収証").Range("E" & i).Value この複数行をYouTubeの例題の様に一行に纏めて書く方法はありませんか?このプログラムも、よちよち歩きで作ったものです(初心者です)よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- hayakoyada
- 回答数2
- 同じコードを毎月使いたい
ブック9月に次のコードを入れ計算しました。正常に使用できました。同じブック内での計算は、1回だけの設定です。 Private Sub 有給計算ボタン_Click() Application.ScreenUpdating = False Unload Me If Sheets("支給実績").Range("G1").Value = "" Then 個人別の作成 MsgBox "有給計算処理を終了しました." D符号部.Show Else ' セルG1に1が入っている場合 MsgBox "既に有給計算処理は終了しています。" D符号部.Show End If Sheets("支給実績").Range("G1").Value = "1" Application.ScreenUpdating = True End Sub このコードを複写して10月分を計算しようとすると"G1には、 "1" が入って入るので計算しません。これをどんな月でも計算できるようにしたいです。どうしてでしょうか、ご教示お願いします。
- ベストアンサー
- Visual Basic
- aitaine
- 回答数1
- VBAが動きません。
VBAのコードが動きません。 エラーも出ないので、どこで動かないかわからずにいます。 どこに原因があるか教えていただけないでしょうか? お手数ですが何卒よろしくお願いいたします。 ※画像参照 '①B列<社員番号>のフィルターを「(空白)」を外す '(1)F列<住所都道府県>のフィルターを「茨城・栃木・群馬・埼玉・千葉・東京・神奈川・新潟・山梨・長野・福島・大阪・兵庫」以外で設定 '(2)H列<エリア>のフィルターを「茨城・栃木・群馬・埼玉・千葉・東京・神奈川・新潟・山梨・長野・福島・大阪・兵庫」以外で設定 Sub フィルタ削除1_1() Dim pref As Variant pref = Array("茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "山梨県", "長野県", "福島県", "大阪府", "兵庫県", "静岡県") Dim r As Long, i As Integer, j As Integer For r = Cells(Rows.Count, 3).End(xlUp).Row To 4 Step -1 If Cells(r, "B") <> "" Then For i = 0 To UBound(pref) If InStr(Cells(r, "F"), pref(i)) > 0 Then Exit For End If Next i For j = 0 To UBound(pref) If InStr(Cells(r, "H"), pref(j)) > 0 Then Exit For End If Next j If (i > UBound(pref)) And (j > UBound(pref)) Then Rows(r).Delete End If End If Next r End Sub
- 締切済み
- Visual Basic
- emimaru888
- 回答数5
- 繰り返し処理のマクロ
下記のマクロをご教示いただけるでしょうか。 ①シートAのアクティブセルをコピーし、シートBのE1セルにペースト ②マクロ「結果反映」を実行 ➂シートAのアクティブセルを1行下に移動 ①から➂をアクティブセル=空白セルになるまで繰り返し
- ベストアンサー
- Visual Basic
- KIKAIDER01
- 回答数2
- 特定の文字に対してポップアップ表示
エクセルvbaでセルに特定の文字を含む文字が入力された時に、ポップアップを表示するようにしたいのですが、特定の文字とメッセージ内容は"設定用シート"内のA列に特定の文字、B列にメッセージ内容をセット。 下記のコードでは動作致しません。 どのように修正すれば宜しいでしょうか? Worksheet_Change(ByVal Target As Range) Dim searchRange As Range Dim cell As Range Dim searchText As String Dim message As String ' 設定用シートを参照 Set searchRange = Sheets("設定用シート").Range("A:B") ' 変更されたセルの中で特定の文字を検索 For Each cell In Intersect(Target, Me.UsedRange) searchText = cell.Value If Not IsEmpty(searchText) Then ' 設定用シートで特定の文字を検索 On Error Resume Next ' セルが見つからなかった場合のエラーハンドリング message = searchRange.Columns(2).Find(searchText).Offset(0, 1).Value On Error GoTo 0 ' エラーハンドリングを元に戻す If Len(message) > 0 Then ' ポップアップ表示 MsgBox message, vbInformation, "メッセージ" End If End If Next cell End Sub
- ベストアンサー
- Visual Basic
- kubotaman
- 回答数4
- VBA コンボボックス
VBAコンボボックスで AAAを選択→処理A BBBを選択→処理B CCCを選択→処理C としている場合、 AAAを選択→処理Aの後、コンボボックスで再度AAAをクリックしても次の処理Aにいきません。いったんBBBをクリックしてしてAAAをクリックすると処理Aに行きますが、連続AAAをクリックして処理Aはできないでしょうか。 何か方法はありませんか? Private Sub ComboBox1_Change() If ComboBox1.Value = "AAA" Then ’処理Aへ ElseIf ComboBox1.Value = "BBB" Then ’処理Bへ Else ’処理Cへ End If End Sub
- ベストアンサー
- Visual Basic
- kuroneko733
- 回答数4
- Excel VBA
外部からモジュールを読み込めるようにしました。 ーーーーーーーーーーーーーーーーーーーーー Sub moduleImport_All() 'インポートしたいファイルのあるフォルダを指定 Dim sImportPath As String sImportPath = "C:\VBA\module\" 'FileSystemObjectの作成 Dim oFso As Object Set oFso = CreateObject("Scripting.FileSystemObject") 'フォルダオブジェクトを取得 Dim oDir As Object Set oDir = oFso.GetFolder(sImportPath) 'ファイル名を順次取得 Dim fFile As Object For Each fFile In oDir.Files 'ファイルの拡張子を取得 Dim sExt As String sExt = oFso.GetExtensionName(fFile.Name) '拡張子からモジュールだけを取得、インポート Select Case LCase(sExt) Case "bas", "cls", "frm" '指定のモジュールをインポート ThisWorkbook.VBProject.VBComponents.Import sImportPath & fFile.Name End Select Next MsgBox "完了" End Sub ーーーーーーーーーーーーーーーーーーーーー しかし、上書きがなされない為、1,2,3とモジュールが増えてしまいます。 読込みたいフォルダ内のファイルと同じ名前であれば全て上書きするにはどのように修正したらよいでしょうか?
- 締切済み
- Visual Basic
- archie007
- 回答数1
- VB6からExcelを最前面に起動する方法
Windows 11 Proの環境でVisual Basic 6のプログラムからExcelを最前面に起動する方法を教えていただけないでしょうか? 現在, ExcelApplicaiton = CreateObject(”Excel.Application") ExcelApplication.Visible = True ExcelApplication.WindowState = xlNormal となっています.
- 締切済み
- Visual Basic
- tarobutch
- 回答数1
- クリスタルレポートのグループヘッダ
Visualbasic 2013とクリスタルレポートを利用してアプリケーション開発を行っております。 クリスタルレポートはサブレポートを準備しており、 メインとなるレポートの詳細部にサブレポートを配置しております。 このような構成でレポートを出力した場合、 必ず1ページ目にグループヘッダのみ出力され、それ以降は正常に出力される事象が発生しております。 1ページ目にグループヘッダのみ出力される理由が分からない状況です。 大変お手数お掛けいたしますが分かる方がいらっしゃいましたら ご教授頂けますと幸いです。
- 締切済み
- Visual Basic
- 19820202
- 回答数1
- Excel VBA
Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。
- 締切済み
- Visual Basic
- archie007
- 回答数2
- VBAでの文字列のダブルクォーテーション
Print #1, "<td class="""" first"""">1ヒート</td>" 結果 <td class="" first"">1ヒート</td> となってしまいます。 <td class=" first">1ヒート</td>にするにはどうしたら良いでしょうか?
- ベストアンサー
- Visual Basic
- nkmyr
- 回答数1
- exeファイルをプログラムから操作する。
お世話になります。 VisualStudio2019(C#またはVB)で下記を実装したいと思っています。 ①あるプログラム(1.exe)のフォーム内にいくつかある指定のボタンを押す。 ⇒ウィンドウを取得、ウィンドウハンドルを取得してボタン押下 ②①の操作でプログラム(2.exe)が起動する。 ③2.exeプログラムの複数あるテキストボックスの中から指定のテキストボックスに文字を入力 ⇒ウィンドウを取得、テキストボックスのウィンドウハンドルを取得してテキストに値をセット いろいろサイトを探したのですが、「まさにコレ」といったものがなく困っています。 もしご教授いただければ幸いです。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- smllslp622
- 回答数2
- visualbasic datagridview
VisualBasic 2013 を利用してWindows Formアプリケーションを構築しております。 DataGridViewを配置してデータベースよりデータ抽出した結果を表示しております。 表示レコードが複数行存在する場合にはスクロールバーが表示されているのですが、スクロールバーの表示が小さいため以下のような方式で制御できないかと考えております。 ★実現したいこと ボタン「↑」を配置しボタンクリックで上側へのスクロール制御 ボタン「↓」を配置しボタンクリックで下側へのスクロール制御 大変お手数お掛けいたしますがご存じの方がいらっしゃいましたらご教授のほどよろしくお願いいたします。 以上です。
- ベストアンサー
- Visual Basic
- 19820202
- 回答数1
- Excel VBAの動作異常
Win11 Office365family Excel (A)のSheet配置でVBAを作成していました。 プロジェクトエクスプローラ(PE)は、当然(B)の通りシート名が(A)と同じです。 ところが、VBAを作っていく段階でいつの間にか(C)のようにSheet1,11,111と増えておりこの時点でコマンドボタンが機能しなくなっていました。Sheet1,11は、Sheetの画面に存在しない。 1) プログラムはSheet1に記録されている。 2) 画面の「クイズ」はPEのSheet111(クイズ)に対応しているが、プログラムが記述されていない。 3) Sheet1に記載のプログラムを全コピーしSheet111(クイズ)に張り付けると正常に動くようになった。 そこで下記についてご教示いただきたくよろしくお願いします。 A) Sheet増える理由:どのような操作をしたから発生したのか? B) Sheet1,11はシートが存在しないので、PEから削除したいがその方法は? C) Sheet111(クイズ)をSheet1(クイズ)に戻す方法は?
- ベストアンサー
- Visual Basic
- ken-nosuke
- 回答数5
- VB フォームのAutoScroll=trueにて
VB.NETで画面を作成しています。 利用者に寄って解像度が異なるため、フォームのプロパティにあるAutoScrollをTrueで設定しています。 その際に、以下の動作となってしまい、ボタンの処理が実行されずに困っています。 解決策ご存じの方いましたら、ご教授をお願いいたします ①初期表示時に見えているテキストにフォーカスが当たっている ②初期表示時には見えなかったボタンをスクロール ③マウスでボタンクリック ④左上にフォーカスの当たっているテキストがギリギリ見える ところまで勝手に移動 ⑤クリックしたはずのボタンの処理が実行されない
- 締切済み
- Visual Basic
- sekisoichiro
- 回答数1
- VBA Forがうまくいきません
画像のコード簡単に説明すると 1~30ランダムで決めて、B6.offset(0,ランダム決めたやつ)にシフトを記号を入力するコードなのですが、これをb6,b8,b10,b12,b16にも同じ事をしたいと思い、 dim ii as long for ii= 6 to 16 step 2 range("b"& ii ).offset(0,ran2) 以下省略でやってみたのですがうまくいきませんでした。 うまくいく方法教えてほしいです よろしくお願いします。 コード汚くてすいません
- 締切済み
- Visual Basic
- SIKI0205
- 回答数1
- フォームからテーブルへの転記
下記はフォームに入力した項目をテーブルに転記するコードです。 Private Sub CommandButton1_Click() Dim ws As Worksheet Dim tbl As ListObject Dim newRow As ListRow Dim lastRow As Long Dim i As Long Set ws = Worksheets("シート1") Set tbl = ws.ListObjects("テーブル") ' Find the last row in the table lastRow = tbl.ListRows.Count + 1 ' Add a new row to the table Set newRow = tbl.ListRows.Add(lastRow) ' Add the data to the new row newRow.Range.Cells(1, 1).Value = tbl.ListRows.Count For i = 1 To 7 newRow.Range.Cells(1, i + 1).Value = Me.Controls("TextBox" & i).Value Next i ' Clear the form For i = 1 To 7 Me.Controls("TextBox" & i).Value = "" Next i Sheets("シート1").Select ActiveWorkbook.Save Unload フォーム1 End Sub このコードを実行した時に、最初のセルには、テーブルでの行番号が挿入されますが(1から始まる)挿入される番号を、23300から始めるにはどうしたらいいでしょうか?(23300+行番号)
- ベストアンサー
- Visual Basic
- kubotaman
- 回答数1