onlyrom の回答履歴

全624件中141~160件表示
  • エクセルのフォームをマクロで登録する方法

    教えてください。 エクセルでデータ入力に「データ」から「フォーム」を作成して入力しております。 共有でしようしますので、マクロボタンを作成して、ボタンをクリックすることで、フォームを表示するようにしたいのですが、Worksheeet クラスのshowDateFormメソッドが失敗しました。「デバック」が表示され、フォームが出来ません。マクロでエクセルからフォーム表示出来る方法をお願いします。

  • ADOを使用してExcelファイルをオープンし、内部結合したい。

    エクセルに2つのシートがあります。 シート名"男性用","女性用" それぞれのシートに"名前"の列があります。 この2つのシートを内部結合して検索したいのですが 可能でしょうか ----------------------シート1個の場合 Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.Properties("Extended Properties") = "Excel 8.0" cn.Properties("Data Source") = App.Path & "\test.xls" cn.Open Dim cmd As ADODB.Command Set rst = New ADODB.Recordset rst.Source = "Select * From [男性用$]" rst.ActiveConnection = cn rst.CursorType = adOpenDynamic rst.Open , , , , adCmdText '------------------------------ これで取り出せますがシート2つを内部結合させたいばあい rst.Source = "Select * From [男性用$]" はどう変えたらいいでしょうか excelでなければ select * from 男性用 inner join 女性用 on 男性用.名前=女性用.名前 となると思いますが。

  • VB6.0からEXCELのセル内文字列のサイズを操作すると、複数回操作したところで失敗してしまう

    VB6.0で、EXCELを編集し印刷するプログラムを作成しており、セル内の半角文字列を均等割り付けしたいと 考えています。 Excelでは、半角数字のみで構成された文字列の均等割り付けができませんが、文字の間にスペースを 入れることで均等割り付けが働くようになります。 そこでVBのプログラムより、既存ファイルのセルに半角数字と半角スペースを交互に80文字ほどセットし、 その後に半角スペースの文字サイズのみを1にする処理を下記のように記述したのですが、20~30文字 くらい処理したところで実行時エラーが発生してしまいます。  Set xlsApp = CreateObject("Excel.Application")  Set xlsBook = xlsApp.Workbooks.Open(ファイル名)  Set xlsSheet = xlsBook.Worksheets(1)  With xlsSheet   …   strTemp = ""   For i = 1 To Len(strText)   '1文字おきにスペースを挟む    strTemp = strTemp & Mid(strText, i, 1)    If i <> Len(strText) Then     strTemp = strTemp & " "    End If   Next i   .Cells(10, 7).Value = strTemp   '途中に挟んだスペースのサイズを1にする   For i = 2 To Len(strTemp) Step 2    .Cells(10, 7).Characters(i, 1).Font.Size = 1  ←実行時エラーはここで出ます   Next i   …  End With エラーの内容は、  実行時エラー -2147417851(80010105)  '~' メソッドは失敗しました: '~'オブジェクト です。 どうやら、このエラーが出たときはExcelがフリーズしたような状態になっているようでした (×ボタンを押しても反応がなく、セル等の入力もできないが、ブックは×ボタンで閉じることができ、 ブックを閉じるとExcelも終了します。が、タスクマネージャを見るとプロセスは残っています)。また、 実行時エラーが発生するループ箇所をコメントにすると、エラーは発生しなくなります。 数種類のPCで試したのですが、全く同じ条件のPCでもエラーが発生するものとしないものがあり、 原因がわからずに困っています。なお、試したPCはOSがすべてWindowsXP、Excelのバージョンは 2000と2003です。プログラムはディストリビューションウィザードで作成したインストーラを使って 配布しています。また、Excel Objectの参照設定は外してコンパイルしています。 記述方法がよくないのでしょうか?みなさまのお知恵を拝借できれば幸いです。

  • VB6.0からEXCELのセル内文字列のサイズを操作すると、複数回操作したところで失敗してしまう

    VB6.0で、EXCELを編集し印刷するプログラムを作成しており、セル内の半角文字列を均等割り付けしたいと 考えています。 Excelでは、半角数字のみで構成された文字列の均等割り付けができませんが、文字の間にスペースを 入れることで均等割り付けが働くようになります。 そこでVBのプログラムより、既存ファイルのセルに半角数字と半角スペースを交互に80文字ほどセットし、 その後に半角スペースの文字サイズのみを1にする処理を下記のように記述したのですが、20~30文字 くらい処理したところで実行時エラーが発生してしまいます。  Set xlsApp = CreateObject("Excel.Application")  Set xlsBook = xlsApp.Workbooks.Open(ファイル名)  Set xlsSheet = xlsBook.Worksheets(1)  With xlsSheet   …   strTemp = ""   For i = 1 To Len(strText)   '1文字おきにスペースを挟む    strTemp = strTemp & Mid(strText, i, 1)    If i <> Len(strText) Then     strTemp = strTemp & " "    End If   Next i   .Cells(10, 7).Value = strTemp   '途中に挟んだスペースのサイズを1にする   For i = 2 To Len(strTemp) Step 2    .Cells(10, 7).Characters(i, 1).Font.Size = 1  ←実行時エラーはここで出ます   Next i   …  End With エラーの内容は、  実行時エラー -2147417851(80010105)  '~' メソッドは失敗しました: '~'オブジェクト です。 どうやら、このエラーが出たときはExcelがフリーズしたような状態になっているようでした (×ボタンを押しても反応がなく、セル等の入力もできないが、ブックは×ボタンで閉じることができ、 ブックを閉じるとExcelも終了します。が、タスクマネージャを見るとプロセスは残っています)。また、 実行時エラーが発生するループ箇所をコメントにすると、エラーは発生しなくなります。 数種類のPCで試したのですが、全く同じ条件のPCでもエラーが発生するものとしないものがあり、 原因がわからずに困っています。なお、試したPCはOSがすべてWindowsXP、Excelのバージョンは 2000と2003です。プログラムはディストリビューションウィザードで作成したインストーラを使って 配布しています。また、Excel Objectの参照設定は外してコンパイルしています。 記述方法がよくないのでしょうか?みなさまのお知恵を拝借できれば幸いです。

  • ListBoxへの表示 及び Labelの文字色変更について

    こんばんわ。いつもお世話になっています。 下記質問事項についてよろしくお願い致します。 1.ListBoxへの表示 ListBoxへ、セルA列に入力している文字を表示させたい。 しかし、A列には追加があるので、決まったRangeではない。 2.Labelの文字色変更 Range("a1")の文字色書式が赤なら、UserFormに貼り付けているLabelの文字色も 赤にしたい。また、CommandButtonの表示色も同じく変えたい。 よろしくお願いいたします。

  • エクセルワークブックのopenについて

    すごく初歩的な質問ですが、、 現在、 Set wsp = ThisWorkbook.Worksheets("書き込みようエクセルシート") に対して、 Set FB = Workbooks.Open("\\Server3\xxxx") を使用して必要なデータの入っているエクセルブックを開き、 Do While FB.Sheets(1).Cells(l, 1) <> "" ' このような形で1件づつ読んで必要な処理をしています。 そのため、server3のエクセルが毎回開くのですが、 これをエクセルを開く必要はなく、ただ中のデータだけ読めればよいという風に変えるにはどうしたらよいのでしょうか? (見た目上の問題ですがデスクトップにエクセルが開くのが嫌だという意味です。) 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • エクセルワークブックのopenについて

    すごく初歩的な質問ですが、、 現在、 Set wsp = ThisWorkbook.Worksheets("書き込みようエクセルシート") に対して、 Set FB = Workbooks.Open("\\Server3\xxxx") を使用して必要なデータの入っているエクセルブックを開き、 Do While FB.Sheets(1).Cells(l, 1) <> "" ' このような形で1件づつ読んで必要な処理をしています。 そのため、server3のエクセルが毎回開くのですが、 これをエクセルを開く必要はなく、ただ中のデータだけ読めればよいという風に変えるにはどうしたらよいのでしょうか? (見た目上の問題ですがデスクトップにエクセルが開くのが嫌だという意味です。) 初歩的な質問で申し訳ありませんが、よろしくお願いします。

  • 引き続きEXCEL2007と2003のソートです

    つい先程の投稿で一旦解決したかと思いましたが、2003用のソートのコードが2007では問題なく動いてますが2003で試してもらったところエラーになります。(メソッド、メンバがない) SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _   key1:=SH2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _   Header:=xlNo, _   Orientation:=xlLeftToRight 2007では問題ないのになぜでしょう?助けて下さい。

  • EXCEL2007と2003のソートの記述の違い?

    下記は配布する予定で作成したプログラムの一部(ソート部)です。EXCEL2007で作成して機能しているのですが残念ながらEXCEL2003ではエラーとなります。(方法2)そこでもうひとつ(方法1)に変えてみましたがどちらもEXCEL2003ではエラーになります。 内容は1行目の見出し部分を並び替えさせるというものです。(優先順に左から右)抜粋コードの前段階では各見出しの先頭にアルファベットと数字を付加し、その後その付加を基準にソート対象列を抜粋コードにより並び替え、その後は付加コードを切り取るという流れです。 残念なことにEXCEL2003が無いものですから、2007と2003のソートの記述の違いが解りません。何卒ご教示願えませんでしょうか? ちなみに変数 見出し列数 は列のカウント数です。(ソート対象外の列)そして変数の指定の誤りというおちはありません。 方法1(2回めに2003用でもいけるかなと思って作成分) SH2.Sort.SortFields.Clear SH2.Sort.Orientation = xlLeftToRight SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)).Sort _ key1:=SH2.Cells(1, 見出し列数 + 1), Order1:=xlAscending, _ Header:=xlNo 方法2 (最初に深く考えず作成したもの 思いきり2007仕様になってます) With SH2.Sort '見出し優先順位により入れ替え .SortFields.Clear .SortFields.Add key:=SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange SH2.Range(Cells(1, 見出し列数 + 1), Cells(1, 見出し列数 + 1).End(xlToRight)) .Header = xlNo .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With

  • Excel VBAを使って他ブックのデータ抽出とコピー

    VBA初心者です、よろしくお願い致します。 現在、Excel97を使用して、実績をまとめるファイルを作成しています。 このファイルのシートに、他ブック(ネットワーク上固定フォルダ固定ファイル名)のデータを抽出コピーを行いたいと思っています。 他ブックは、品名(A3)、日付(C3~AG3)(1日~31日)という列からなり、品名数の増減があります。 様々な情報を参照させていただき下記のようなコードを作成しました。 Set wb1 = Application.ActiveWorkbook 'ブックを開く Application.ScreenUpdating = False Set wb2 = Application.Workbooks.Open(dataDirJisseki & dataNameJisseki, ReadOnly:=True) 'コピーする With wb2 .Worksheets("SMT生産実績").Range("A3:A65536").Copy _ Destination:=wb1.Worksheets("work_jisseki").Range("A1") .Worksheets("SMT生産実績").Range(colTmp & "3:" & colTmp & "65535").Copy _ Destination:=wb1.Worksheets("work_jisseki").Range("B1") End With 'ブックを閉じる Set wb1 = Nothing wb2.Close Savechanges:=False Set wb2 = Nothing Application.ScreenUpdating = True 上記プログラムでも希望した動作にはなるのですが、下記について改善したくご相談させていただきました。 (1)抽出する列を他ブックから検索したい  現状では、抽出する列を自ブックのシートの"日付"セルに入力させ、その値に該当する他ブックの列名をSelect Caseを使って判断しています。 Select Case Day(Range("日付")) Case "1" colTmp = "C"     : Case "31" colTmp = "AG" End Select  これでは他ブックの列構成が変わってしまうと異なるデータ列を取ることになるため、日付を使って他ブックから該当列を検索するようにしたいです。 (2)他ブックのデータ数(行列数)を使ってコピーをしたい  現状では行数最大値の65536でコピーしていますが、他ブックのデータ数でコピーしたい。 以上ですが、是非お力添えをいただければと思います。 説明等不足がありましたら、そちらも指摘ください。よろしくお願いします。

  • VBA ユーザーフォーム

    こんばんわ。 VBA、ユーザーフォームで、ListBoxか、Comboboxで、セルの値を参照し、そこから1つ選択するようにするにはどういうコードがりますか? Private Sub Userform_Initialize   Listbox1.AddItem "700" Listbox1.AddItem "701"   ・・・・・   ・・・・・   ・・・・・ End Sub と、やると、ListBoxには反映しますが、列が多すぎて、作成するのに手間が掛かる為、例えば、"700" の値に、Sheets(1)のC2から、C500の値を入れるようなコードはありますか? 宜しくお願いします。

  • Excel2007の名前参照について

    Excel2007での名前参照についてお伺いいたします。 以下のような作業を行うことが可能かどうか教えていただきたく。 (例) 前提 A1からG1までに"TEST"という名前をつける(ここは準備しております)。 必要な作業 B2からH2までにそれぞれ右に「1列ずつずれた」"TEST"と名前を付けた範囲の値を読み込ませる。 現在、スプレッドシートを作成しておりまして、前年度のデータを読み込ませる必要があります。通常どおりに名前参照を行うと当年度の値を読み込んでしまいます。 なお、OFFSET関数については以下のような設定で試してみましたができませんでした。 =offset(TEST,0,-1) どうかご教示ください。

  • excel vbaのwithについて

    早速質問させていただきます。 withでオブジェクト2つ指定したいのですが方法はありますか? 例えばComboBox1とComboBox2に同じものを入れたい場合です。 With ComboBox1 .AddItem "abc" .AddItem "123" .AddItem "アイウ" End With 上記と同じ事をComboBox2でもしたいです。 よろしくお願いします。

  • EXCEL2003 VBA: プロットエリアの高さ・幅設定

    VBAでグラフを作成しています。 セル幅を基準に高さ・幅にしたく、コードで指定しています。 プロットエリアに関してですが ActiveChart.PlotArea.Width = 200 のように指定してもデバックで確認しても設定値になっていません。 (38)になっていました・・・。 そのせいなのか Sheet1.Range(Sheet1.Cells(lOutPutRow, 1), Sheet1.Cells(lOutPutRow, 1)).Width - 60 といった設定もうまく行かず・・・。 高さも同様です。 単位変換等必要なのでしょうか。 まったくお手上げで・・・、 助言いただけたら嬉しいです。

  • .copy に、Rangeではなく Cells を使えませんか?

    ブック間で、変数によるコピー貼付けをしたいのです Workbooks(MyFName).Worksheets("部品表").Cells(j * 17 - 11, 2).Copy_ Workbooks(MyFName2).Worksheets("PartsList").Cells(k * 39 - 37, 2) と書いて見ましたが、デバックしてしまいました。 .Activate の場合も cellsは使えませんか? どうぞ教えてください

  • ExcelVBAメッセージボックスの表示方法。

    シートABCの セル D8・D9・D10・D12の中で空白のセルが有ったら、 メッセジボックスで「入力漏れがあります。入力画面を確認して下さい。」 と表示させ、入力漏れの無いことが確認出来ている時は、次の処理に進ませるには、どのようにプログラムを書いたら良いでしょうか? ご教示下さい。 宜しくお願い致します。

  • 一定のセル範囲で複数の条件に該当しないセルの有無を簡単に取得する方法

    A1:A20の範囲で、空白ではなく、A~Eや1~5のどれにも該当しないセルの有無を取得する場合、以下のような長ったらしい関数以外でもっと簡単な方法はないでしょうか? なお、設定の検索値のA~Dや1~5は例であり、実際は別の規則性のない文字列および数値です。 宜しくお願いいたします。 =SUMPRODUCT((A1:A50<>"")*(A1:A50<>1)*(A1:A50<>2)*(A1:A50<>3)*(A1:A50<>4)*(A1:A50<>5)*(A1:A50<>"A")*(A1:A50<>"B")*(A1:A50<>"C")*(A1:A50<>"D")*(A1:A50<>"E"))=0

  • リストボックスにExecuteExcel4Macroで取得したデータを表示したいのですが

    インターネットと参考書を利用して独学で仕事用VBAを作成している者です。 素人なりにいろいろ試してはいるのですがうまくいかないのでご教授願えたらと思い投稿しました。 質問は2つ+α で、 1.そもそも表題にあることが可能なのか?不可能なのか? 2.可能であるならどの辺りを修正したら良いのか? です。 +α というのは、恥ずかしながら具体的な提示です。 よろしくおねがいします。 Private Sub CommandButton3_Click() TextBox1 = Sheets("Sheet1").Range("A1").Value Dim DYear Dim mypath Dim dateFpath DYear = TextBox1.Text mypath = ActiveWorkbook.Path dateFpath = mypath & "\Date" & DYear ChDir mypath & "\Date" & DYear 'dateFpath 'カレントフォルダ Dim FCnt As Integer FCnt = 0 Dim dateName dateName = Dir(DYear & "証票*.xls") Dim sx As Long 'シートの列番号 ListBox1.ColumnCount = 6 '3列表示 ListBox1.ColumnWidths = "100 pt;35 pt;35 pt;35 pt;35 pt;35 pt;35 pt;35 pt;35 pt" '表示する列の幅 Dim nen nen = "年月日" Dim ji ji = "時" Dim fun fun = "分" Do While dateName <> "" FCnt = FCnt + 1 sx = 4 dateName = Dir() With ListBox1 .AddItem .List(FCnt, 0) = dateName '1列目 .List(FCnt, 1) = nen '2列目 sx = sx + 1 .List(FCnt, 2) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '3列目 sx = sx + 1 .List(FCnt, 3) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '4列目 sx = sx + 1 .List(FCnt, 4) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '5列目 sx = sx + 2 .List(FCnt, 5) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R4C" & sx).Value '6列目 sx = sx + 1 .List(FCnt, 6).Value = ji '7列目 .List(FCnt, 7) = Application.ExecuteExcel4Macro("'" & dateFpath & "\[" & dateName & "]Sheet1'!R2C" & sx).Value '8列目 sx = sx + 1 .List(FCnt, 8).Value = fun '9列目 End With Loop MsgBox FCnt & "個のデータが見つかりました" End Sub 以上です。 ループ1順目の3列目で停止してしまいます。 変数の値は確認しています。 よろしくお願いします。

  • 12個のCommandbuttonをスマートに

    はじめまして 2003 XP UserFormにCommandbuttonが12個あります。 Private Sub CommandButton1_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "1" Else: TextBox1.Value = TextBox1 & "1" End If End Sub Private Sub CommandButton2_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "2" Else: TextBox1.Value = TextBox1 & "2" End If End Sub Private Sub CommandButton3_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "3" Else: TextBox1.Value = TextBox1 & "3" End If End Sub Private Sub CommandButton4_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "4" Else: TextBox1.Value = TextBox1 & "4" End If End Sub Private Sub CommandButton5_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "5" Else: TextBox1.Value = TextBox1 & "5" End If End Sub Private Sub CommandButton6_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "6" Else: TextBox1.Value = TextBox1 & "6" End If End Sub Private Sub CommandButton7_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "7" Else: TextBox1.Value = TextBox1 & "7" End If End Sub Private Sub CommandButton8_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "8" Else: TextBox1.Value = TextBox1 & "8" End If End Sub Private Sub CommandButton9_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "9" Else: TextBox1.Value = TextBox1 & "9" End If End Sub Private Sub CommandButton10_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "0" Else: TextBox1.Value = TextBox1 & "0" End If End Sub Private Sub CommandButton11_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "00" Else: TextBox1.Value = TextBox1 & "00" End If End Sub Private Sub CommandButton12_Click() If Me.MultiPage1.Value = 0 Then TextBox3.Value = TextBox3 & "000" Else: TextBox1.Value = TextBox1 & "000" End If End Sub  これをもっとスマートに出来ないでしょうか? 宜しくお願いします。

  • Excelのハイパーリンクで元に戻す方法

    Excel2003で1つの表から他のシートにハイパーリンクを設定してあるのですが、ハイパーリンクであるシートが開くのですが、元のシートに簡単に戻る方法はありませんか? ブラウザの戻るようなボタンがあればよいのですが、Excelはハーパーリンクの場合は元に戻るボタンがきかないようですので。 よろしくお願いします。