Visual Basic
- 4次方程式の解を求めるマクロ
今学校で4次方程式の解を求めるマクロを作っています。 2次方程式までは作りました。なんかプログラムが書かれた紙をもらって打ち込んだらできました。そのあと4次方程式(ax^4+bx^2+c=0)を作る方法を考えてどんなふうに2次方程式のプログラムを変えたらいいか考えたんですけど、その考え方が合ってるかと、プログラムを変えたところがあってるかをみてほしいです。 まずx^2をmと置いて、am^2+bm+c=0にすると、m=-b±√b^2-4ac / 2a になってここからxを求めると、x=±√ -b±√b^2-4ac / √2a となると思います。そしたら解が4つ最大で出ると思うので、下の画像のようにプログラムを書き換えました。 家にはパソコンがなくて、学校でやろうと思うので、お返事は遅くなってしまうかもしれません。よろしくお願いします。
- ベストアンサー
- Kurumi9Hiba
- Visual Basic
- 回答数1
- エクセルVBA ファイル名操作
エクセルマクロのコードにおきまして 「フォルダの選択」ダイアログから エクセルファイル 123.xlsxを例えば 開くときに それをa.xlsxという名前に変えて 以下のそれに続くVBAコードにおいて a.xlsxを操作したいのですが、 a = Application.GetOpenFilename() Workbooks.Open a これを実行すると求めるダイアログが表示されて 使いたい123.xlsxを開くをクリックしますが これでは123.xlsxがa.xlsxにはなりません このa.xlsxのファイル名で別途ファイル作成する方法を 御教示いただけると助かります よろしくお願いします win10 office365 コードは以下 部分ですが こういう流れで作成したい所存です Sub あいう() a = Application.GetOpenFilename() Workbooks.Open a 'b.xlsxファイルを新規作成 Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\USER\Desktop\あいう\b.xlsx", FileFormat:=xlXMLSpreadsheet 'a.xlsxファイルの1行目のA1~AG1のセルの値をコピー Workbooks("a.xlsx").Worksheets("Sheet1").Range("A1:AG1").Copy 'b.xlsxファイルのA3~AG3のセルに貼り付け Workbooks("b.xlsx").Worksheets("Sheet1").Range("A3:AG3").PasteSpecial xlPasteValues 以下省略 よろしくお願いします
- ベストアンサー
- sushidokei
- Visual Basic
- 回答数2
- Excelに対応してコンボボックスを選択するマクロ
Excelのコンボボックスの表記と同じ表記のものをゆっくりムービーメーカーという別アプリの指定したコンボボックスから選ぶVBAマクロを開発したいです。カスタムと書かれたコンボボックスを動かしたいです。ですが、他にもclassnameやAoutmationIDが同じコンボボックスがあります。その中で自分の指定したコンボボックスを動かす方法も教えて頂きたいです。エクセルの「セリフ」sheetのE列にコンボボックスがあり、コンボボックスの中身は「表情」sheetのA列の表記(例魔理沙笑う) Excelのコンボボックスの表記と同じ表記のものをゆっくりムービーメーカーという別アプリの指定したコンボボックスから選択するVBAマクロを開発したいです。見づらいですが画像の右端の真ん中くらいにあるカスタムと書かれたコンボボックスを動かしたいです。ですが、他にもclassnameやAoutmationIDが同じコンボボックスがあります。その中で自分の指定したコンボボックスを動かす方法も教えて頂きたいです。エクセルの「セリフ」sheetのE列にコンボボックスがあり、コンボボックスの中身は「表情」sheetのA列の表記(例:魔理沙笑う)です。ゆっくりムービーメーカーのコンボボックスにも「表情」sheetのA列の表記(例:魔理沙笑う)と同じものが複数存在します。私はゆっくりムービーメーカーのコンボボックスの中からExcelのコンボボックスの表記と同じ表記のものを選択するVBAマクロを開発したいです。ご指導よろしくお願いします。下のマクロを改良したいですが、あくまで前のバージョンかつ私が作りたいマクロと似ていますが違うものなので参考程度にお願いします。 これと全く違うスクリプトでも構いません。よろしくお願いいたします。 Private Sub zputTachieParam(Param() As Variant) Dim i, j, k, row_blank, f_hetitem As Integer Dim x_char As String Dim tmp, x_last_item As Variant Dim elmYukkuri_tachie As IUIAutomationElement 'RegExpオブジェクトの作成 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") '正規表現の指定 With reg .Pattern = "[^0-9]" 'パターンを指定 .IgnoreCase = False '大文字と小文字を区別するか(False)、しないか(True) .Global = True '文字列全体を検索するか(True)、しないか(False) End With hWnd = FindWindowA(vbNullString, C_アプリ名) Set uiAuto = New CUIAutomation Set elmYukkuri = uiAuto.ElementFromHandle(ByVal hWnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ItemEditorView") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ScrollViewer") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "Editor") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Set iCnd = uiAuto.CreatePropertyCondition(UIA_NamePropertyId, "立ち絵") Set elmYukkuri = elmYukkuri.FindFirst(TreeScope_Subtree, iCnd) Dim elms_ComboBox As IUIAutomationElementArray Set iCnd = uiAuto.CreatePropertyCondition(UIA_ClassNamePropertyId, "ComboBox") Set elms_ComboBox = elmYukkuri.FindAll(TreeScope_Children, iCnd) Dim ptnVal As IUIAutomationSelectionItemPattern f_hetitem = 0 x_last_item = "" For j = 0 To elms_ComboBox.Length - 1 tmp = Split(elms_ComboBox.GetElement(j).CurrentHelpText, "\") If UBound(tmp) > 0 Then '選択されてるコンボボックス '現状の設定とパラメータ値を比較 If Param(j) <> Int(Replace(tmp(UBound(tmp)), ".png", "")) Then elms_ComboBox.GetElement(j).SetFocus 'ENDキーで最後の選択肢に持っていく wshSendKeys "{END}", True f_hetitem = 0 For k = 0 To 200 elms_ComboBox.GetElement(j).SetFocus 'Debug.Print "1> " & elms_ComboBox.GetElement(j).CurrentHelpText tmp = Split(elms_ComboBox.GetElement(j).CurrentHelpText, "\") If UBound(tmp) > 0 Then 'Debug.Print "2> " & reg.Replace(tmp(UBound(tmp)), "") If Param(j) = Int("0" & reg.Replace(tmp(UBound(tmp)), "")) Then f_hetitem = 1 Exit For End If wshSendKeys "{UP}", True Else 'Debug.Print "nohit!" wshSendKeys "{DOWN}", True Exit For End If Next End If End If Next Sleep 100 End Sub
- ベストアンサー
- noname#259561
- Visual Basic
- 回答数1
- VB.NET DataTableについて
質問失礼します。 VB.Netで、テーブルに格納されたデータをDataTableを利用し、SQLを実行、抽出してきました。 その結果から、さらに抽出したいのですが、方法がわかりません。 dataに格納したものは、問題なく抽出できています。(データセットビジュアライザーで確認済み) 以下、 番号 名前 合計 1 りんご 10 2 ぶどう 20 3 りんご 30 の、ように3行結果が取れました。 そこから、名前が重複していル値があるかどうか、またその数を確認したいです。 (りんごが、2行ある) この方法がどうしてもわからず、 Dim rows As DataRow() から rows = data.Select("名前 = りんご") とすれば、りんごが2行あると数がわかりますが、 これが、りんごとは、限らないため、 重複している名前があるか、どうかを調べたいところです。 勉強して、まだ浅く、わかりづらい説明で申し訳ありませんが、ご回答のよろしくお願いします。
- 締切済み
- yt0426
- Visual Basic
- 回答数2
- ゆっくりムービーメーカーを動かすExcelVBAの
https://www.youtube.com/watch?v=r_9JLzXMsk4&t=16s この動画のマクロをゆっくりムービーメーカーの最新のバージョンでも使えるようにしてほしいです。或いは立ち絵変更の時にカスタムをいじってスムーズに立ち絵変更が出来るようにしてほしいです。v14.01ではバージョン名の変更を除いてそのまま利用できました。よろしくお願いします。
- ベストアンサー
- qqqqqqqqqqwwwww
- Visual Basic
- 回答数1
- VBAセル番地が移動したとき更新するには
前回の質問の延長になります。 https://okwave.jp/qa/q10219443.html#answers Sub Step1_copy() Worksheets("RAsheet").Range("D8").Value = Worksheets("RAsheet").Range("X9").Value End Sub 入力フォームの入力欄にINDEX関数で抽出した値を代入して入力作業を簡略しようとしています。 抽出セルX9を番地ではなく名前で宣言して格納し、代入などでセル番地を指定していた箇所に名前を入れてセル番地が移動したときに一括で反映させるようにする方法はありますでしょうか。 詳しい方いましたらご教授ください。
- 締切済み
- nadeko666
- Visual Basic
- 回答数2
- VBAの作成方法について
マクロ初心者です。 エクセルの値のコピペに時間がかかっているため、マクロを使って自動化させたいと思っています。 どなたかソースを教えていただけますでしょうか? <内容> ・「実績データ」という名前のエクセルデータに値を貼付けさせたい。 シート構成は「140」「540」といった部門コード名のシートが複数あります。 ・値を持っている別エクセルデータは「実績データ140」と最後に部門コード3桁をつけた名前になります。 ・「実績データ140」のデータを「実績データ」のシート140にそのデータを貼付けしたい。 ・なお、「実績データ140」ファイルのシート名は140です。
- 締切済み
- ibc-zaimu
- Visual Basic
- 回答数1
- 既定のプリンターに設定するマクロ
マクロを設定したのですがうまくいきません。なぜでしょうか。プリンターの名前はプロパティからそのままコピーしたので名前は大丈夫だと思います。 実行時エラー 1004 コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。 少し時間をおいて開いた時 実行時エラー 1004 ActivePrinterメソッドは失敗しました。 Option Explicit Private Sub Workbook_Open() Application.ActivePrinter = "iR-ADV C3530 III" End Sub
- ベストアンサー
- terabayahi1988
- Visual Basic
- 回答数2
- vbaで外部アプリの起動
ユーザーフォーム内に作成したボタンをクリックすると、バーコードマネージャforWindowsが起動して読みこんだQRコードをテキストboxに転記するような事は出来るでしょうか? まずはバーコードマネージャを起動してみようと実行ファイルの場所を探したんですが見つかりません。 可能であればコード例を教えてください。
- 締切済み
- kubotaman
- Visual Basic
- 回答数1
- マクロでテーブルの日時のオートフィルターの制御
テーブルには「1~6時」、「1日中」、「6~8時,21~22時」などいろいろな時間が書いてあるセルがあります。このテーブルにマクロを使って「1時」「2時」...「24時」などのボタンを24個作りオートフィルターの絞り込みをしようとしています。 このままでは使いづらいので検索列というものを作り、「1時,2時,3時,4時,5時,6時」、「1日中」、「6時,7時,8時,21時,22時」と入力しました。 とりあえず「1時」の絞り込みのマクロを作りました。 Option Explicit Sub One_Oclock() With ActiveSheet.ListObjects(1) .Range.AutoFilter .ListColumns("検索列").Index, _ "1時*", xlOr, "1日中" End With End Sub 1時はセルの頭にくるのでこれで11時や21時を除外することはできましたが逆に「1時」のみのセルは除外されてしまいました。 また2時の場合は「"*2時*"」、「"*2時"」「"2時*"」「"1日中"」となりやはりうまくいきません。どうすればいいですか。
- 締切済み
- terabayahi1988
- Visual Basic
- 回答数5
- VBA セルの値を別セルにコピーするには
VBAでPastespecialでセルの値を別セルにコピーするマクロを組みたいです。 以下は参考にしたソースコードです。 Worksheets("Sheet1").Range("A1:B10").Copy Worksheets("Sheet2").Range("A1").PasteSpecial _ Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False あるExcelマクロの入力フォームSheetに、製品リストと使用している場所のマスタデータをクエリで読み込んで、製品IDと場所のコードを入力したらINDEX関数で抽出し、マクロ実行ボタンを押すと抽出結果を入力フォームの入力欄に貼り付けします。 上記のマクロだと貼り付けする元セルを移動させたら内容がずれた値がそのまま貼り付けされてしまうと思われますが、地道にコードのコピー元のセルを書き直さないといけないのでしょうか。 Excelの関数だと参照範囲を固定したら掴んで移動させてもセル番地が連動して移動してくれますが、マクロの場合どのようにすれば良いでしょうか。 また、複数個所のセルをコピーするので Paste:=xlPasteValues, _ Operation:=xlNone, _ SkipBlanks:=False, _ Transpose:=False をコピーするセルの箇所に毎回入れていますが、コピー元のセル・コピー先のセル番地を一括して実行する方法はありますでしょうか。 VBAはソースコードを参考に当てはめているだけで、自力でコードを書くスキルは皆無です。 Excelは2016です。 詳しい方いましたらご教授ください。よろしくお願い致します。
- ベストアンサー
- nadeko666
- Visual Basic
- 回答数8
- 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
- ベストアンサー
- dio2000
- Visual Basic
- 回答数2
- VBAの変数の型
WorkSheet型、Range型、ADO.Connection型とかをオブジェクト型と総称していますが、Long型やString型等は総称するとどうなるのでしょうか?
- ベストアンサー
- readme_eml
- Visual Basic
- 回答数1
- EXCELVBA閉じるときに行うコマンド
EXCEL VBA で ブック閉じるときに一番左のシートをアクティブにして閉じたいのですが、構文教えてください。
- ベストアンサー
- h6322813
- Visual Basic
- 回答数1
- EXCELのマクロ
CSVデータで 例えば G列に あり なし の判定をしていて ひとつでも あり があれば メッセージを出して警告 するようにしたいのですが どうような文になりますか?
- 締切済み
- sam2019
- Visual Basic
- 回答数2
- Sortメソッドが上手くいかない
Option Explicit '単価で並べ替える Sub SortUnitPrice() Range("B:G").Sort _ key1:=Range("D3"), _ key2:=Range("E3"), _ Header:=xlYes End Sub D3とE3はヘッダーにしてD4とE4の値で並び替えをしようとしたのですが上手くいきません。 このコードを実行すると「実行エラー」Rangeクラスのsortメソッドが失敗しました。と出ます、なぜでしょうか。
- ベストアンサー
- terabayahi1988
- Visual Basic
- 回答数2
- Excel VBA時計がずれる理由
Excel Office 2021 Windows11 Excelの特定セルに1秒ごとに時計をきざむVBAコードをインターネット上で探して標準モジュールに組み込みましたが、time.is/jaのサイトの表示時刻と60秒以上ずれて表示されました そこでBing AIに"D1"セルに時刻表示をするコードを書かせ(下記)、ボタンにVBAをセットし押してスタートしましたが、時刻表示はされるもののやはり75秒ほどずれて(遅れて)表示されます。 Sub DisplayCurrentTime() Range("D1").Value = Time Application.OnTime Now + TimeValue("00:00:01"), "DisplayCurrentTime" End Sub この理由は何なのでしょうか? なにかExcel VBAの仕様が変わったとかありますでしょうか?
- ベストアンサー
- ketae
- Visual Basic
- 回答数1
- データ上のサイズを取得したい
実際のサイズではなくデータ上のサイズを取得するためにはどう変更したらいいですか。 Option Explicit 'シートの名前を変更する Private Sub workbook_open() Dim fso As Object Dim filePath As String Dim fileSize As Double ' ファイルパスを取得 filePath = ThisWorkbook.FullName ' ファイルシステムオブジェクトを作成 Set fso = CreateObject("Scripting.FileSystemObject") ' ファイルサイズを取得(単位はバイト) fileSize = fso.GetFile(filePath).Size ' ファイルサイズをKBに変換(切り上げ) fileSize = Application.WorksheetFunction.RoundUp(fileSize / 1024, 0) ' ワークシートの名前を変更 Dim NewSheetName As String NewSheetName = fileSize & "KB" Sheets(1).Name = NewSheetName End Sub
- 締切済み
- terabayahi1988
- Visual Basic
- 回答数2
- テキストデータを複数の変換条件に従って高速処理
CSVファイルがあり、そこにはクレジットカード利用データが記録されています。 日付、店名、金額、処理番号とでもさせてください。 店名に従って、カテゴリを書き込んでいきます。マクドナルドなら食事とかヒルトンなら宿泊費などです。マクドナルドだけでも店場所がちがうとそれらもまとめなければなりません。このあたりは正規表現で置換させます。 どこから店名のリストと対応するカテゴリのリストを用意して条件を作成するのか、という問題がありますが(最初は手打ち)とりあえずどうやってスクリプトを書いていけばよいのか指針を教えてください。何百という対応リストに何十というデータ行があります。一行づつ読んでいき、店名リストに一つずつ照らし合わせていくのではかなり遅くなるのではないでしょうか。 こういったときにはどういうロジックを使用するのでしょう?2次元配列とか聞いたことがあります。カード利用回数だけループさせて何百という条件処理を一度にくぐらせる、もしくは履歴データを丸ごと条件処理数だけくぐらせれば時間短縮になりますよね。うまく伝わってくれればよいのですが。 エクセルマクロにするのかパイソンで書くのかも考えなければなりません。(他は経験まったく無し) どうぞよろしくお願いいたします。
- 締切済み
- piyo-maru7
- Visual Basic
- 回答数2
- このブックでマクロが使用できないか、またはすべての
このマクロをsubプロシージャから実行しました。問題なく実行デッキました。しかしマクロを登録したボタンからは実行できず、なぜかこのエラー文が出てしまいました。 Sub 日付の非表示、表示() Set f1 = Sheets(1) Set h1 = Sheets(2) Set f2 = Sheets(3) Dim d1 As Date, dday As Date d1 = f1.[AG3].Value d2 = Day(d1) f1.[A:AG].EntireColumn.Hidden = False f2.[A:AG].EntireColumn.Hidden = False h1.[A:AG].EntireColumn.Hidden = False Select Case d2 Case Is = 15 MsgBox "非表示にする行はありませんでした。" Case Is = 16 f1.[AG:AG].EntireColumn.Hidden = True f2.[AG:AG].EntireColumn.Hidden = True h1.[AG:AG].EntireColumn.Hidden = True Case Is = 17 f1.[AF:AG].EntireColumn.Hidden = True f2.[AF:AG].EntireColumn.Hidden = True h1.[AF:AG].EntireColumn.Hidden = True Case Is = 18 f1.[AE:AG].EntireColumn.Hidden = True f2.[AE:AG].EntireColumn.Hidden = True h1.[AE:AG].EntireColumn.Hidden = True End Select End Sub 他の場所にこんなマクロを作りボタンから実行したのですが問題なく実行出来ました。 Sub デバッグ() [AK7].Value = 11 End Sub 原因は何でしょうか?
- ベストアンサー
- terabayahi1988
- Visual Basic
- 回答数1