『Visual Basic』に関する質問・疑問一覧

関連カテゴリ

次へ  ]
22014件中 41~60件目
  • ウィンドウハンドル値の範囲。0~Longの最大値?

    よろしくお願いします。 ウィンドウハンドルは、0~Longの最大値という認識で間違いないでしょうか? マイナス値はないと思っております。 また、ルートのウィンドウハンドルは、0ではなくGetDesktopWindow()で得られた値で間違いないでしょうか?

    2019/03/29 11:42
  • テキストファイルのエンコードの種類

    VBで開発された海外のソフトウェアでテキスト形式で保存すると日本語の2バイト文字が文字化けします。で、テキストのエンコードを調べるとShift-JISだったりします。 そもそもテキストファイルのエンコードの種類を決めるのはソフトウェアなのでしょうか。それともOSの側でしょうか?

    2019/03/25 11:25
  • vbs 数字の間に記号を挟む

    以下の文字列があるとします。 ABCDEFG12345 これを以下に変換したいです。 ABCDEFG1.2.3.4.5 プログラムのご教示頂きたいです。

    2019/03/20 09:56
  • VBAについて教えてください。

    下記の手順でVBAを組みたいのですが どのようにすればよいかご教示いただけないでしょうか。 手順 (1)【A様sheet】>E9に入っている数字を<請求書sheet>E11にコピペ。 (2)【A様sheet】>J9に入っている数字を<請求書sheet>E12にコピペ。 (3)【A様sheet】>E3に入っている数字を<請求書sheet>E13にコピペ。 (4)<請求書sheet>E13に―100。  (5)【A様sheet】>A1に入っている文字列を<請求書sheet>C11以下にコピペ。 ※(2)が〈0〉だった場合には何も入力せず、(3)に進む。 ※(4)-100は固定数値です。 ※(5)は数字が入った分だけ繰り返します。 完成系は添付の画像のような結果です。 毎月数100件の処理が発生するためVBAで行いたいと思っています。 どうぞよろしくお願いいたします。

    2019/03/18 15:44
  • Aa

    Microsoft Internet Controlsの参照設定 Option Explicit Sub テキストボックス操作() Dim ie As InternetExplorer Dim txtInput As HTMLInputElement Dim txtOutput As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-2.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop Set txtInput = ie.document.getElementById("Text1") MsgBox txtInput.Value Set txtOutput = ie.document.getElementById("Text2") txtOutput.Value = "VBA からの書き込み" End Sub Sub ラジオボタンの操作() Dim ie As InternetExplorer Dim radio1 As HTMLInputElement Dim radio2 As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-6.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop For Each radio1 In ie.document.getElementsByName("Radio1") If radio1.Checked = True Then MsgBox radio1.Value Exit For End If Next For Each radio2 In ie.document.getElementsByName("Radio2") If radio2.Value = "女" Then radio2.Checked = True Exit For End If Next End Sub Sub ハイパーリンクをクリック() Dim ie As InternetExplorer Dim anchor As HTMLAnchorElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-7.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop For Each anchor In ie.document.getElementsByTagName("A") If anchor.innerText = "やきそばパン vs 揚げパン" Then anchor.Click Exit For End If Next End Sub Sub ボタンをクリックボタン2() Dim ie As InternetExplorer Dim button As HTMLInputElement Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True ie.navigate "http://book.impress.co.jp/appended/3384/4-8.html" Do While ie.Busy Or ie.readyState < READYSTATE_COMPLETE DoEvents Loop For Each button In ie.document.getElementsByTagName("INPUT") If button.Type = "button" And button.Value = "ボタン2" Then button.Click Exit For End If Next End Sub

    2019/03/18 11:44
  • エクセルVBAでSQLを打ちたいです

    仕事上自動化ツールを作成したいのですが、どうしてもエクセルでSQLが出来ず困っています。 やりたいこと:ボタンひとつで、エクセルシートにある表の必要な部分を取り出して別のシートに貼り付ける。 SQLでは SELECT xxxxx,data,MIN(time) As times From xxxxx WHERE ●●●="●●●" GROUP BY xxxxx,data; です。 実際に今書いているVBAが途中なのですが、 Option Explicit Sub createInsertSql() Dim newbook As Workbook Dim currentCell As Range '前処理 Dim srcSheet As Worksheet Set srcSheet = ActiveSheet Dim targetRange As Range Set targetRange = srcSheet.UsedRange Dim head As String head = "SERECT " & srcSheet.Name & " (" Dim first As Boolean first = True Dim currentColumnIndex As Integer For currentColumnIndex = 1 To targetRange.Columns.Count If (first) Then first = False Else head = head & "xxxxx,data,MIN(time)" End If Set currentCell = srcSheet.Cells(1, currentColumnIndex) head = head & currentCell.Value Next head = head & ") " '新しいBook作成 Set newbook = Workbooks.Add Dim currentRowIndex As Integer For currentRowIndex = 2 To targetRange.Rows.Count Dim sql As String sql = head & "values (" first = True For currentColumnIndex = 1 To targetRange.Columns.Count If (first) Then first = False Else sql = sql & "," End If Set currentCell = srcSheet.Cells(currentRowIndex, currentColumnIndex) If IsNull(currentCell) Or Trim(currentCell.Value) = "" Then sql = sql & "null" ElseIf IsNumeric(currentCell.Value) Then sql = sql & currentCell.Value Else sql = sql & "'" & currentCell.Value & "'" End If Next sql = sql & ");" newbook.ActiveSheet.Cells(currentRowIndex - 1, 1).Value = sql Next End Sub いろんなサイトを見ていろいろ組み合わせてみたのですが、やはり出来ず。 意味を理解しようとも中々できずです。 恐れ入りますが、答えまではいかなくとも、どのようにしたらいいかのヒントだけでも いただけると嬉しいです。 よろしくお願いします。

    2019/03/12 13:04
  • Excel ActiveXボタンが使えない

    VBA を実行する ActiveXコントロールボタンが使えなくなりました。 今まで :  1) メニューの「開発」--> 「デザインモード」選択 --> ボタンを選択 --> VBA コードが表示される。 2) ボタンのプロパティを見ると「Button 1」といったオブジェクト名が表示される。 昨日から : 1) メニューの「開発」--> 「デザインモード」選択 --> ボタンを選択 --> (図の) 書式メニューが表示される 2) ボタンのプロパティを見ると「Sheet1」と表示される。(Sheet 1にあるボタンは全て) 一週間前に更新された Windows のアップデートプログラムをアンインストールし、再起動しても変わりがありませんでした。 よろしくお願いします

    2019/03/10 13:37
  • マクロ セルの色を含むシート間のコピー貼り付け

    このようなことが、できるでしようか。お教え下さいませんか。 シート1のB2~P列の最終行を取得してコピー、シート2のA2のO列の間に貼り付けたい。 但し、シート1は関数処理していて、シート2には値だけを貼り付けたい時のマクロはどのようなコードにすればよいでしょうか。 また、罫線はそののままコピーして貼り付けたい。 更に、シート1のB2からB列の最終行までは、黄色のセルになっているので、それもシート2のA2~A列の最終行まで貼り付けることってできますか。 お教え頂けますでしょうか。よろしくお願いします。

    2019/03/04 21:52
  • VBA

    一つ人一つのセルの値を上から順番に比較していき、マッチしたらそのマッチしたセルの行の値を拾ってnの関数に格納する方法を教えてください。

    2019/03/03 15:07
  • 列コピーについて

    VBAを利用した複数必要列をコピーする方法を教えて下さい。 シート1に入っているデータで 1行目には、項目名が入っています。 項目数はMAX200個前後です。 毎月各担当者からデータが入ったExcelブックを受け取り 必要な列だけを残して、データをコピペして頑張っていたのですが、 毎回列並びが異なるのと、担当者によっては抽出してくる 項目が違うため担当者ごとに修正するのが手まで困っております。 作業を以下の様にしたいです。 各ブックに入っている項目数はバラバラですが、最終的に必要な項目は 各担当者で必ず残してもらえています。 但し各担当者によって列並びがバラバラで困っています。 (1)例えばシート1に以下の様にデータを入力しておく (担当者で) A B(列) (行) 1 test 2 支店 3 営業担当者 4 番号 (2)シート2は各担当者より提出されるデータをまるっと貼り付ける A B(列) (行)test 日付 支店 営業担当者 エリア 番号 住所 電話番号 1 2 2行目以降はデータだけが入っている 3 4 ★行いたいのは(2)に入っているデータより★ (1)に入力されているB列の2行目以降に入っている項目キーと一致するデータを (2)からコピーしてシート3へ必要な項目が入っているデータを列ごと貼り付けたい 最終イメージーはにシート2に入っているデータから、 シート1には入っている項目だけのデータを シート2からコピーしたデータだけがシート3に残るようにしたいです。 以下がシート3で最終的に残るデータとしたい A(列)   B(列) C(列) D(列) E(列) F(列) → 以降項目数が続く (行)test  支店   営業   担当者 番号    電話番号 1 2 2行目以降はデータだけが入っている 3 4 ↓ 以降 データが入っている 必要データ以外は削除としたのですが、 項目数が多く以下の内容ではうまくいきませんでした。 ※例として書いているのが項目名が4つとしていますが、 必要な項目数はおよそ30前後になります。下記の内容では、 文字数の関係でエラーが出た為必要な項目をコピーして別シートへ貼り付ける方が よいとアドバイスをいただいたのですがうまく書けませんでした。 Dim rng As Range Set rng = Cells.Find("test、支店、営業担当者、番号", , xlValues, xlWhole) If Not rng Is Nothing Then Range(rng.Offset.EntireColumn, rng.Address).Delete End If Set rng = Nothing どのようにすれば必要な項目を列ごとコピーして別シートへ貼り付けることができるでしょうか。 是非お力添えをお願い致します。

    2019/03/03 13:18
  • Image Jのマクロについて。

    Image Jのマクロについて。 Image j初心者です。 現在、特定のフォルダ内にある複数枚の画像を同時に解析して、解析した結果をcsvファイルに保存する作業を行っています。 画像が大量にあるためマクロを組んで自動化したいのですが、「結果を”選択したフォルダ名.csv”という名前にして、特定の場所に保存する」というコードが書けません。 かみ砕いて書くと以下のような感じです。 ・1つのフォルダ内に画像が複数枚ある。 ・これらの画像を解析した結果は1つのcsvファイルに保存する(つまり1フォルダにつき1つのcsvファイルが生まれる)。 ・このようなフォルダが複数あり、それぞれのフォルダ名とcsvファイル名を対応させたい。 ・こうしてできた複数のcsvファイルをある特定のフォルダ内にまとめて保存したい。 どなたかご存知の方、よろしくお願いいたします。 ちなみに現在のコードはこのような感じです。 色々なサイトのコードを貼り付けているだけなので、自分でも一つ一つのコードが何を意味しているのかはわかりませんが、 1.解析したい画像群のフォルダを選択する。 2.これらの画像をまとめて解析する。 3.解析した結果を表示する。 というところまでは自動でできています。        //Do something for selected folder showMessage("Select Open Folder"); openDir = getDirectory("Choose a Directory"); showMessage("Select Save Folder"); saveDir = getDirectory("Choose a Directory"); list = getFileList(openDir); for (i=0; i<list.length;i++){ operation(); }; print("Macro Finished"); //Define operations function operation(){ open(openDir+list[i]); name = getTitle; dotIndex = indexOf(name, "."); title = substring(name, 0, dotIndex); run("8-bit"); setAutoThreshold("Intermodes dark"); //run("Threshold..."); setOption("BlackBackground", true); run("Convert to Mask"); run("Watershed"); run("Analyze Particles...", "size=5-Infinity display include add"); newname = title+"_analyzed_.jpg"; rename(newname); saveAs("Jpeg", saveDir+newname); close(newname); }

    2019/03/01 18:24
  • VBAの書式

    VBAで dr = drh + ":" + drm + ":" + drs + ":" + drf として 一つのセルに表示させると 00: 12: 34: 56 とコロンの後に半角スペースが入ってしまいます。 半角スペースを入れない方法を教えてください。

    2019/02/28 19:15
  • 回答ありがとうございました!

    分かりやすい回答を記載いただきありがとうございました! xlsxではなく、xlsの場合は 【FileName = Dir(ThisWorkbook.Path & "\*.xls")】に変えればよいのかな?と思ったのですが、完成しませんでした。 お手数ですがご教示いただけないでしょうか・・・(T_T) 何度も申し訳ありません… どうぞよろしくお願いします。 日下

    2019/02/26 15:19
  • Vba質問の続きお願いします

    ドキュメントに移動するからドキュメントはCドライブ直下ではないから動かないのですね、ではどこに移動すれば構文を変えず済むのでしょうか、Cドライブそのものに移動してもだめでした。usbからusbは問題なしの理由も教えて下さい。 また、バックスラッシュを入れると¥マークになりますどのようにすれば良いか教えてくださるようお願い致します。 初心者で申し訳ありません。

    2019/02/23 08:17
  • AccessVBAの標準モジュール

    標準モジュール Public PSwMdel As Boolean Public Function PMsgDel() If (MsgBox("削除してよろしいですか?", 1 + 48 + 256, "削除処理確認メッセージ゛") = vbOK) Then PSwMdel = True Else PSwMdel = False End If End Function と作成し、削除前の確認処理を共通で使えるようにしています。 (メッセージボックスでOKを押すとPSwMdelがTrueになって削除モジュールが動くようにする) 普通は全く問題なくモジュール通りに動くのですがここ最近急に正しく動かないものが出てきました 普段フォーム内のモジュールで Call PMsgDel If PSwMdel = True Then  ~以下削除処理~ END IF としているのですがメッセージボックスでOKを押しても削除が実行されなかったのです おかしいと思いブレークポイントで確認するとOK押した後PMsgDel内ではPSwMdel = True フォームモジュールに戻るといきなりPSwMdel = Falseに変わってしまいIF後の削除処理を通っていませんでした また、PSwMdelをウォッチ式に入れて確認もしてみたのですがOKを押した後は ずっとTrueのまま変わっていませんでした 今まで何年も同じようなコードを使用していますがこんな事は一度も無かったので困惑しています どうすればOK押した後でも確実にPSwMdel = Trueを元のフォームモジュールに持って行けるのでしょうか?

    2019/02/21 16:32
  • 【VBA】Function内のValueについて

    VBAについて教えてください。 以下のFunctionで定義したCells(i, "○").Valueに値が入力されません。 iのカウントアップまでは正常に行われています。 このFunctionはExcel上で関数で「=Order_Buy(1111,テスト)」のようにして呼び出しています。 ちなみにSubで定義して単体で実行すると該当セルに値が入力されました。 何が問題か、ご教授いただけないでしょうか Public Function Order_Buy(ByVal code As String, ByVal meigara As String) As String Dim i As Integer i = 3 Do Until Cells(i, "M") = "" i = i + 1 Loop Cells(i, "M").Value = Now Cells(i, "N").Value = code Cells(i, "O").Value = meigara Order_Buy = "test" End Function

    2019/02/14 00:42
  • 二つのマクロで一気に処理したい

    以下のようなことができるのかお伺い致します。よろしくお願い致します。  やりたいこと   ※ 前提として、sheet1にすでにA列に通し番号で奇数の数字が入っている。    1.sheet1からsheet2へコピペーストする。しかし、A列からO列のすべてにデータがあった場合のみコピー貼り付けさせたい。     (前提で示したように、A列に通し番号で奇数の数字が入っていて、A列のみ数字があり、以外が空欄の行があるため)    2.下記のコピー貼り付けのコードと重複削除のコードを合体させて、一つの処理で動かしたい。 Sub コピー貼り付けつけ()  'コピー貼り付けつけのコード Dim lastRow As Long 'Sheet1のA3から最終行までをコピー With Sheets("sheet1") .Range("A3:O" & .Cells(Rows.Count, "A").End(xlUp).Row).Copy End With 'Sheet2のA列の最終行の次の行に貼付け Sheets("sheet2").Cells(Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial Application.CutCopyMode = False End Sub Sub 重複データを一括削除する() ' Macro1 Macro Dim i As Long, lastRow As Long, myRng As Range LastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To lastRow - 1 If WorksheetFunction.CountIf(Range(Cells(i + 1, "O"), Cells(lastRow, "O")), Cells(i, "O")) > 0 Then If myRng Is Nothing Then Set myRng = Cells(i, "O") Else Set myRng = Union(myRng, Cells(i, "O")) End If End If Next i If Not myRng Is Nothing Then myRng.EntireRow.Delete End If End Sub

    2019/02/13 12:19
  • Excelマクロの配列計算が♯VALUE!となる

    Excelマクロの複素数を扱う配列計算がエラーとなります.  下記HPからマクロを標準モジュールに取り込み,以前のQAで助けて頂き 一部修正により動作するようになりました. しかし,このマクロで定義した「 IMINVERS 」関数を実行すると,大きい 配列では「#VALUE!」となってしまいます. 助けて頂けませんか! http://www.geocities.jp/tomtomf/denki/AC2/ac2.htm http://www.geocities.jp/tomtomf/denki/AC1/ac1.htm 〔問題の現象〕  整数の行列(6×6)以上の配列計算は「#VALUE!」となる.  複素数の行列(5×5)以上の配列計算は「#VALUE!」となってしまう. 小さい配列では正しく計算できているので,手順には問題ないようにみえます. どこに問題があるのでしょうか. 問題の「 IMINVERS」関数に関するマクロは以下の通りです。 ----------------------------------------------------------- Public Function IMABSa(a As Variant) As Variant IMABSa = Application.WorksheetFunction.ImAbs(a) End Function Public Function IMDIVa(a As Variant, b As Variant) As Variant IMDIVa = Application.WorksheetFunction.ImDiv(a, b) End Function Public Function IMPRODUCTa(ParamArray a()) As Variant IMPRODUCTa = Application.WorksheetFunction.ImProduct(a) End Function Public Function IMPRODUCTb(a As Variant, b As Variant) As Variant IMPRODUCTb = Application.WorksheetFunction.ImProduct(a, b) End Function Public Function IMSUBa(a As Variant, b As Variant) As Variant IMSUBa = Application.WorksheetFunction.ImSub(a, b) End Function Public Function IMSUMa(ParamArray a()) As Variant IMSUMa = Application.WorksheetFunction.ImSum(a) End Function Public Function IMSUMb(a As Variant) As Variant IMSUMb = Application.WorksheetFunction.ImSum(a) End Function ----------------------------------------------------- Public Function IMINVERS(a As Range) As Variant Dim n As Integer, n1 As Integer, n2 As Integer Dim r1 As Integer, r2 As Integer, c As Integer Dim max As Variant Dim i As Integer Dim m() As Variant Dim inm() As Variant Dim rr As Integer, cc As Integer Dim no As Integer, ex As Variant n1 = a.Rows.Count n2 = a.Columns.Count n = n1 ReDim inm(1 To n1, 1 To n2) For rr = 1 To n1 For cc = 1 To n2 If rr <> cc Then inm(rr, cc) = 0 Else inm(rr, cc) = 1 End If Next Next ReDim m(1 To n1, 1 To n2) m = a If n1 <> n2 Then IMINVERS = False Exit Function End If For r1 = 1 To n max = m(r1, r1) no = r1 If r1 < n Then For i = r1 + 1 To n If IMABSa(m(i, r1)) > IMABSa(max) Then max = m(i, r1) no = i End If Next If (r1 <> no) Then For i = 1 To n ex = m(r1, i) m(r1, i) = m(no, i) m(no, i) = ex Debug.Print m(r1, i), m(no, i) ex = inm(r1, i) inm(r1, i) = inm(no, i) inm(no, i) = ex Next End If End If max = m(r1, r1) For i = 1 To n m(r1, i) = IMDIVa(m(r1, i), max) inm(r1, i) = IMDIVa(inm(r1, i), max) Next For r2 = 1 To n If r1 <> r2 Then max = m(r2, r1) For i = 1 To n m(r2, i) = IMSUBa(m(r2, i), IMPRODUCTa(m(r1, i), max)) inm(r2, i) = IMSUBa(inm(r2, i), IMPRODUCTa(inm(r1, i), max)) Next End If Next Next IMINVERS = inm End Function ------------------------------------------------

    2019/02/11 15:42
  • Excelマクロで定義の関数実行結果が#VALUE

    以前にマクロの記述について教えて頂いた件の再度の質問になります. Excelマクロで複素数を扱う関数を下記HPから標準モジュールに コピペしました.今度は正しくコピーできていると思います. しかし,計算結果がどうしても「#VALUE!」となってしまいます.何故でしょうか? どなたか助けて頂けませんか! http://www.geocities.jp/tomtomf/denki/AC2/ac2.htm http://www.geocities.jp/tomtomf/denki/AC1/ac1.htm 今回は関数定義の「 IMMULT」関数に関する部分に絞っています. ここまで絞ってもエラーになるのは,単純な問題なのでしょうか? 行列の積を求めるマクロの手順にも問題はなさそうです. Public Function IMPRODUCTa(ParamArray a()) As Variant IMPRODUCTa = Application.Run("atpvbaen.xlam!IMPRODUCT", a) End Function Public Function IMSUMa(ParamArray a()) As Variant IMSUMa = Application.Run("atpvbaen.xlam!IMSUM", a) End Function Public Function IMMULT(a As Range, b As Range) As Variant Dim r1 As Integer, r2 As Integer, c1 As Integer, c2 As Integer, nn As Integer Dim r As Integer, c As Integer Dim cr As Integer, cc As Integer Dim n As Integer Dim mm() As Variant r1 = a.Rows.Count r2 = b.Rows.Count c1 = a.Columns.Count c2 = b.Columns.Count If c1 = r2 Then nn = c1 Else Exit Function End If cr = r1 cc = c2 ReDim mm(1 To cr, 1 To cc) For r = 1 To cr For c = 1 To cc mm(r, c) = 0 For n = 1 To nn mm(r, c) = IMSUMa(mm(r, c), IMPRODUCTa(a.Cells(r, n), b.Cells(n, c))) Next Next Next IMMULT = mm End Function

    2019/02/06 22:29
  • RAND関数です

    お願いします。 A1~A20までに入力枠があります この数値は他の箇所より参照しています。 このA1~A20の数値に対してB1~B20に=RAND()で乱数を発生するようにしていますが、ただ、データー入りがA1~A20行が最大で、A1~A7までの時とか毎回変化します。当然、データーの入っていない行にも乱数が発生します。 =IF(ISERROR(RAND()))、” ”、((RAND())))) で表示させないようにとしましたが、できません。 関数の」組み合わせ?マクロのコード? いい方法がありませんでしょうか、宜しくお願いします。

    2019/02/06 11:56

ピックアップ