jcctaira の回答履歴

全261件中1~20件表示
  • VB初心者です

    エクセルVB初心者です。 ウェブサイトから情報を取ろうと思いました。 <dt class="market zsg-fineprint"> <!-- Market Text & tooltip --> <!-- Non-Market Text & Tooltip --> Market <sup>&reg;</sup>: $1.18M</dt> <dt class="market zsg-fineprint"> から"1.18M"を取り込んで現在のセルから右に6個目のセルにコピペしようと思い、次のようなSubを作りましたが、うまく行きません。 Sub getMarket(objIE As Object) Dim MarketPosition As Integer Dim DollarPosition As Integer MarketPosition = InStr(1, objIE.Document, "Market") DollarPosition = InStr(marketPosition, objIE.Document, "$") ActiveCell.Offset(0, 6) = Mid(objIE.Document, DollarPosition + 1, 4) End Sub うまく動作させるためにはどうしたらよいでしょうか?

  • シートを選択したい vba

    自身のファイルを読み取り専用で新たに立ち上げて、シートを選択したいのですが Private Sub cmd_読み取り専用で開く_Click() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) xlApp.Visible = True xlApp.xlBook.Sheets("メイン").Select Set xlApp = Nothing Set xlBook = Nothing End Sub だと xlApp.xlBook.Sheets("メイン").Selectでエラーになります。 文法が間違ってると思うのですが、修正案をご教授ください。

  • 親フォルダを取得したい

    Sub test1() Dim mystr As String mystr = ActiveWorkbook.Path End Sub これだと、現在のアクティブブックのファイル名以外のパスが取得できるのですが、 mystr = ActiveWorkbook.Parent.Path にすると、なぜか C:\Program Files (x86)\Microsoft Office\Office14 が返ります。 ActiveWorkbook.Path の返り値が C:\新しいフォルダー だとしたら、 C: のみが取得されるコードが知りたいのですが、 ActiveWorkbook.Parent.Path ではダメなようなので、正しいコードを教えてください。

  • EXCEL Spirit関数 繰り返し処理

    EXCEL VBAでテキストファイルを読み込み、Spirit関数にて項目内容を書き出しています。 下記のコードの日付部分は1日~31日まで繰り返しになります。 Dim maxRow As Integer Dim maxCol As Integer Dim i As Long Dim mytxtfile As String, myStr As String Dim myRange As Range Dim mySp() As String Dim sh1 As Worksheet On Error GoTo myError mytxtfile = "D:\明細.TXT" Set sh1 = Worksheets("元データ") Set myRange = sh1.Range("A1") sh1.Cells.Clear Open mytxtfile For Input As #1 Do Until EOF(1) Line Input #1, myStr myRange.Offset(i, 0).Value = myStr myStr = Replace(myStr, """", "") mySp = Split(myStr, ",") myRange.Offset(i, 1).Value = mySp(0) '卸名 myRange.Offset(i, 2).Value = mySp(1) 'コード myRange.Offset(i, 3).Value = mySp(2) 'フラグ myRange.Offset(i, 4).Value = mySp(6) '納品先 myRange.Offset(i, 5).Value = mySp(7) '店舗 myRange.Offset(i, 6).Value = mySp(23) '日付 ---------ここから myRange.Offset(i, 7).Value = mySp(26) '1日_金額A myRange.Offset(i, 8).Value = mySp(27) '1日_金額B myRange.Offset(i, 9).Value = mySp(34) '1日_金額C --------ここまでが 1日分です。これが31日まで続きます。 i = i + 1 Loop Close #1 '31日までのデータが無い場合のエラーを無視する(データが存在する日まで書き出す) myError: Resume Next sh1.Range("A:A").Delete 'txt取込作業列を削除 End Sub カンマ区切りの位置は、15ずつ増えますので 繰り返し処理したいのですが、うまくいきません。 最初は、金額A だけの書き出しだったため、 1行ずつ書いていたのですが、金額B、Cの列も必要になりました。 for next で すっきりした書き方を教えていただけないでしょうか? 宜しくお願い致します。

  • ExcelVBA変数等でのファイルのOpen方法

    ExcelVBAで、変数でのファイルのOpen方法を教えてください。 以下のフォルダ構造とします。 '////////////////////////////////////////////////////// マクロファイル.xls 1フォルダA  ∟1999ファイルA.xls  ∟2000ファイルA.xls  ∟2001ファイルA.xls  ∟2002ファイルA.xls  ∟2003ファイルA.xls  ∟2004ファイルA.xls ・・・ 2フォルダB  ∟1999ファイルB.xls  ∟2000ファイルB.xls  ∟2001ファイルB.xls  ∟2002ファイルB.xls  ∟2003ファイルB.xls  ∟2004ファイルB.xls ・・・ 3フォルダC  ∟結果ファイルC.xls '////////////////////////////////////////////////////// マクロファイル.xlsのシートにコンボボックスとボタンを配置します。 コンボボックスで【2001】を選択した場合は、 前後1年…合わせて合計3年分のファイルの「A5~A25」の値が、 「結果ファイルC.xls」にコピーされるようにしたいのです。 コピー内容や範囲が多く1つのプロシージャーに収まり切りませんでした。 そこで「結果ファイルC.xls」ファイルを1つめのプロシージャで開き、 2つめのプロシージャで残りの処理を実行しようとしたのですが、 変数、コンボボックスの値でのファイルを開く方法がわからず困っており、 どなたかお知恵をお貸し下さい。 以下のようなコードを書いてみましたがエラーとなりました。 '////////////////////////////////////////////////////// Dim vTgYear As Variant Dim myFLName1 As String, sWbkSubName1 As String Dim myFLName2 As String, sWbkSubName2 As String, SubName As String, vTgYear = ComboBox1.Value For i = -1 To 1 sWbkSubName1 = "3_フォルダC\結果ファイルC.xls" myFLName1 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName1 SubName = "vTgYear + i & _ファイルA.xls" sWbkSubName2 = "1_フォルダA & SubName" myFLName2 = ThisWorkbook.Path & sWbkSubName1 Workbooks.Open Filename:=myFLName2 (実行コード中略) Next i '////////////////////////////////////////////////////// 今回はファイルの開き方だけなので、実行コードを省略させていただきました。 初歩的な質問かと思いますが、何卒お力をお貸しいただけますと幸いです。 よろしくお願い致します。

  • Excel IF関数を短くする式を教えて下さい。

    ベストアンサーにさせて頂いた方のやり方で別な問題点が出てきたので再び同じ質問です。 画像のB2セルに入る数式を短くまとめたいのです。。 今のところは下記のような式で上手くいっていますが、長すぎて編集する際困ってます。 =IF(D2="",0,IF(D2<4.5,D2,4.5))+IF(F2="",0,IF(F2<4.5,F2,4.5))… +IF(D3="",0,IF(D3<3.5,D3,3.5))+IF(F3="",0,IF(F3<3.5,F3,3.5))… +IF(D4="",0,IF(D4<4.5,D4,4.5))+IF(F4="",0,IF(F4<4.5,F4,4.5))… +IF(D5="",0,IF(D5<3.5,D5,3.5))+IF(F5="",0,IF(F5<3.5,F5,3.5))… +IF(D6="",0,IF(D6<4.5,D6,4.5))+IF(F6="",0,IF(F6<4.5,F6,4.5))… +IF(D7="",0,IF(D7<3.5,D7,3.5))+IF(F7="",0,IF(F7<3.5,F7,3.5))… D2~7にはC2~7を使った式が入っています。 つまり、D,F,H,J,L,N,P,R,T,V,X列をA列の数値と比較したときに 小さい方を合計として出したいのです。 どなたか分かる方いらっしゃいましたらよろしくお願いいたします。

  • Excel VBA

    VBAでセルF1に数式を入れようと次のようにしました。 Range("F1").Formula = "=if(D4=" & """"",""""" & ",JIS(PHONETIC(D4)))" 実行したところ、F1セルは「#NAME?」と表示されてしまいます。 F1セルの数式バーには、きちんと、「=if(D4="","",JIS(PHONETIC(D4)))」となっています。 この数式を数式バー内で一度選択してリターンキーで決定するときちんとD4セルのふりがなが入ります。 これまでにも、数式を入れたことはあったのですが、こんなことにはなりませんでした。 今回は、なぜ正しい関数式が入ってもきちんと表示されないのか分かりません。 よろしくお願いします。

  • Function プロシージャの戻り値にバグ?

    いつも拝見させていただいてます。 今回Excel VBAでタイムスケジュールを作成したところ、まったくわけのわからないエラーが発生してしまい途方に暮れており、皆様のお力をお借りしたく投稿させていただきます。 エラーの内容は簡単に言うと Function プロシージャの戻り値がなくなってしまう(0になっている)ことです。 ESC = ESColumn(EventStart) ---------------------------------- Function ESColumn(TimecoluConv As Date) As Integer Select Case TimecoluConv Case "8:00:00" ESColumn = 2 Case "8:10:00" ESColumn = 3 Case "8:20:00" ESColumn = 4 ・・・ End Select End Function と、このようなコードで入力された時間を数値に変換しているのですが、 繰り返し処理をしているといきなり戻り値が0になってしまいます。 今回は8:00を6回取得した後、8:10を変換しようとしたら戻り値が0になっていました。 戻り値を使用して、セルを選択するため、そのタイミングでエラーになります。 なぜ繰り返し処理の途中で発生するのでしょうか。 解説と対策をご教示していただけると大変助かります。 よろしくお願いします。

  • 文字列の分解・格納

    お世話になります。 文字列の分解についてお聞きします。 環境はVB.NET2008です。 Private Sub Main(ByVal CmdArgs() As String) Dim cmds() As String cmds = System.Environment.GetCommandLineArgs() End Sub コマンドライン引数で以下のように文字列を取得しています。 ("起動exe", "/KEY=○○○/ テーブル名=△△△") この文字列を元に、 変数Aに○○○を変数Bに△△△を代入したいのですが、どうやるのでしょうか? ご教示願います。

  • VB2010入力制御について

    ・計算機アプリケーションです ・テキストボックスは数値と「-(マイナス)」「.(小数点)」以外は入力できないように制御しています。 ・テキストボックス1と2に入力したものをボタン1を押して計算し、ラベル2に表示します。 テキストボックスに数値以外が、もしくは「3-2」「.32」「32.」等の不正な値が入った場合に、メッセージボックスを出して入力の誤りを指摘するプログラムを書きたいです。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ If Not IsNumeric(TextBox1.Text) Then MsgBox("不正な値です", vbExclamation, "ERROR") Label2.Text = "ERROR" ElseIf Not IsNumeric(TextBox2.Text) Then MsgBox("不正な値です", vbExclamation, "ERROR") Label2.Text = "ERROR" End If End Sub 色々と調べてみて、IsNumericが使えそうだったのでこのプログラムを書いたのですが、 これだと「-」や「.」だけを書いた場合にはちゃんとエラーメッセージが出ますが、 「32-」「.32」「32.」等は数字だけを認識して、計算結果を表示してしまいます。 何が足りないのか、もしくは使用している関数を変えたほうがいいのか、アドバイスいただければ幸いです。 以上、ご回答宜しくお願い致します。

  • VBAで新規ファイル名

    VBAであるテンプレートのファイルを開いて、ファイル名をB3セルに入力された名前で保存したいのです。まず、下にマクロを示します。 Sub 新規_試作マスタ作成() ChDir "C:\Users\H1250-201\Desktop" Workbooks.Open Filename:="C:\Users\H1250-201\Desktop\試作マスター.xlsm" ChDir "D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & "" ActiveWorkbook.SaveAs Filename:="D:\A\" & Format(Date, "yyyy年") & "\" & Format(Date, "yyyy年m月") & "\" & Format(Date, "yyyymmdd") & " " & ThisWorkbook.Sheet1.Range("B3").Value & " 試作.xlsm", FileFormat _ :=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False End Sub Dドライブの中のAというフォルダがあり、その中に、2014年→2014年1月の順にフォルダがあります。ただし、Aの中には2013年~2020年、2014年の中には、2014年1月~2014年12月のフォルダがあるのです。そこで、今日の日付を参照してそれに応じたフォルダ分けを行い、ファイルの頭に「日付」、その後に「B3セルに入力された名前」、「試作」の順に 「日付」 「B3セルに入力された名前」 「試作」という名前で保存されるマクロを作成したいのです。 上のマクロでは、ThisWorkbook.Sheet1.Range("B3").Valueの部分がおかしくてうまく行きません。個々の部分をただ文字列として"○○"とするとうまくいきました。 つまり、マクロのある自身のファイルのセルを参照したいのです。差し支えなければご回答願います。

  • 税込み価格から本体金額を算出

    = A1-(A1*0.05) とすると、 2,793,000 になってしまいます。 実際の金額は2,800,000 になるのですが、 なぜエクセルの計算式を使うと金額が合わないのでしょうか?

  • VBAのバイナリ出力について

    この度はお世話になります。 VBAについて、調べながらやっているのですが・・・うまくいかずに悩んでいます。 エクセルのVBAでバイナリファイル(xxx.bin)を出力したいのですが 思った出力が出ないでいます。 エクセルの方でDEC2HEXをした512文字を、そのままの状態でバイナリファイルを生成をしたいです。 そこで、まずはtxtで書き出せるかやってみまして・・・ Sub test() fnsave = "1.txt" Worksheets("Sheet1").Activate numff = FreeFile Open fnsave For Output As #numff temp = Range("C3") Print #numff, temp Close #numff End Sub (Sheet1のセルのC3に512文字入っています。) これをOutputをBinaryにして・・・Putで書く? 多分2文字を取り出して・・・書き込む?ような感じなのですが それをプログラムに起こす書き方がわからず困っています。 申し訳ございませんが、ご教授よろしくお願いします。。。

  • メモリを使いすぎている? VBA

    Excel2003です。 いつも大変お世話になっております。 以前、 大量のグラフ(項目数50のグラフを30個以上) などを作った際にエラーが出て、 ブックを閉じることも、デバックをキャンセルすることも 保存することも出来なくなったことがありました。 今後二度とこのようなことが無いようにしたいのですが、 何が原因でしょうか? 原因の特定のため、 拾ってきたマクロを実行しました。 Sub Sample1() Dim n As Long, msg As String n = Application.MemoryTotal msg = msg & "Excelが使用できるメモリの総容量:" & Format(n / 1024, "#,##0") & "KB" & vbCrLf n = Application.MemoryUsed msg = msg & "Excelが使用しているメモリの総容量:" & Format(n / 1024, "#,##0") & "KB" & vbCrLf n = Application.MemoryFree msg = msg & "Excelが使用できるメモリの空き容量:" & Format(n / 1024, "#,##0") & "KB" MsgBox msg End Sub 実行したところ、 「使用できるメモリ総量:5,256KB  使用してるメモリ総量:4,232KB  使用できるメモリ空き:1,024KB」 と表示されました。 メモリ空きは少しありますが、 残り20%以下しかありません。 これが普通でしょうか? メモリ解放方法や、何かメモリをあまり使わないようにする為に 見るポイントなどありましたら教えてください。 よろしくお願い致します!

  • Escキーを押すと、中断する時としない時がある

    エクセルVBAです VBAでループしているときに、Escキーを押すと、中断する時としない時があるのですが しない時はなぜしないのでしょうか?

  • テキストボックスに入力された値の判定

    Visual Studio2010初心者です。C#で学習しています。 テキストボックスに入力された値が数字(0~9)かそうじゃないか判定をしたいです。 テキストボックスに文字が入力されたらエラーとして検知したいのですが、どのように処理をすればよろしいでしょうか? ネットで調べるとTryParseメソッドでできるみたいですが、よくわかりません・・・ よろしくお願いします。

  • TRACKER : error TRK0002:

      お世話になります。 Visual Studio 2010 SP1(VB.net)での"ビルド失敗"についての質問です。 OSが Windows7 Pro(32bit)、DBはSQL Server2008、Framework2.0でビルドも正常に成功し 正常に動作しているアプリがあります。 そのソースをOSがWindows 7 Pro(64bit)でその他の環境は上記と同じPCにソースをコピーし ソリューションを開いてビルドを行うとビルドが失敗してしまいます。 エラー、警告は1件もなく、出力ウィンドウを見ると以下のメッセージが出力されていました。 ------ ビルド開始: プロジェクト: DBconnect, 構成: Release Any CPU ------ TRACKER : error TRK0002: ========== ビルド: 正常終了または最新の状態 0、失敗 1、スキップ 0 ========== アプリで使用している小さなクラス(DB接続のみ)のような複雑ではないコードでも ビルドに失敗してしまいます。 エラーメッセージで調べてみると 64bit開発環境 特有のエラーらしいことは分りましたが Visual C++(?)の情報しか見つけられませんでしたので質問させていただきました。 解決方法を知っている方がいらっしゃいましたらご教授お願い致します。

  • エクセル2003 SUMPRODUCT

    いつも回答して頂き、とても感謝しています。 =SUMPRODUCT((アラーム履歴一覧!$B$2:$B$100=Sheet2!$B5)*(アラーム履歴一覧!$C$2:$C$100=Sheet2!C$3)*(アラーム履歴一覧!$D$2:$D$100=Sheet2!C$4)*(アラーム履歴一覧!$E$2:$E$100=Sheet2!$D$1)) 上記の(アラーム履歴一覧!$D$2:$D$100=Sheet2!C$4)のSheet2!C$4が空欄だった場合、左記を無効にして個数をカウントしたいのですが、どうすればよろしいでしょうか?

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • VBA アクティブなセルのシート名を取得したい

    エクセル2010使用です。 VBAで、アクティブなセルのあるシート名を取得する方法を教えてください。  マクロ.xls (マクロシートA1) ←今回のマクロを書き込んだファイル  参照.xls (参照シートA1)  入力.xls (入力シートF3) この3つのエクセルファイルを開きます。 ( )内はそれぞれの前面にあるシート名と選択されたセルです。 入力シートのF3にカーソルをおいて下記マクロを実行すると   MsgBox ActiveSheet.Name & ActiveCell.Address 「マクロシート F3」と返されます・・・ ほしい結果は「入力シート F3」なんです。 このような場合にアクティブセルのあるシート名を取得する方法があれば教えてください。 よろしくお願いいたします。