Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


47 / 3841 ページ ←次へ | 前へ→

【81542】Re:特定のフィールドの左3文字を非表示に
質問  YS  - 20/11/15(日) 13:20 -

引用なし
パスワード
   環境は、win7 office2003です。よろしくお願いいたします。
・ツリー全体表示

【81541】特定のフィールドの左3文字を非表示に
発言  YS  - 20/11/15(日) 13:17 -

引用なし
パスワード
   以下のコードでmdbからクエリをexcelに入れて印刷しようとしています。

Dim mycon As ADODB.Connection

Dim fin As String
Dim ador As Excel.Range
Dim adorr As ADODB.Recordset

Set mycon = New ADODB.Connection

fin = "**.mdb"
With New Excel.Application
  Set ador = .Workbooks.Open("**.xls").ActiveSheet.Range("a2")
 
 
  .Visible = True
End With
With ador.Worksheet.PageSetup


  .LeftMargin = 0
  .RightMargin = 0
 .TopMargin = 0
  .BottomMargin = 0
  .CenterHorizontally = True
.CenterVertically = True
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintGridlines = True


  End With
ador.Worksheet.PrintPreview


With mycon
.Provider = "microsoft.jet.oledb.4.0"
.ConnectionString = "data source=" & fin
.Open
Set adorr = .Execute("** クエリ")
ador.CopyFromRecordset adorr
 With ador.CurrentRegion.Borders

 .LineStyle = xlDouble
End With

adorr.Close
mycon.Close


End With

mdbには商品コードフィールドがありそのフィールドには同じ数字が3桁ありその3文字を非表示にしたいです。商品コード12345678なら45678のように左3文字をフィールド全て非表示にするやり方をご教授お願いいたします。また、印刷に関してもご指摘ありましたら、重ねてお願いいたします。
・ツリー全体表示

【81540】VBAでWebのスクレイピング
質問  YAMADA  - 20/11/13(金) 15:18 -

引用なし
パスワード
   VBAでWebのスクレイピングを行っています。
まず Windows 8.1 Excel32ビット環境でプログラム作成し正常に動作することを確認しました
続いて、別のPC Windows 10.0 Excel32ビットで動作させたところ

実行時エラー 2125463506(815002e)
このエラーコードに関連付けられたテキストが見つかりませんでした

のエラーが発生し
場所は
Set objIE = CreateObject("InternetExplorer.Application")
であることがわかりました。

何が原因か教えてください
・ツリー全体表示

【81539】Re:VBAである範囲に入力した文字種の自動...
お礼  やぶ  - 20/10/25(日) 22:10 -

引用なし
パスワード
   hatena さん

早い返答、大変助かりました!
おかげでうまく業務のファイルを作成することができました。

教わった内容は自分のものにできるよう、しっかりと勉強していきます。
本当にありがとうございました!
・ツリー全体表示

【81538】Re:VBAである範囲に入力した文字種の自動...
回答  hatena  - 20/10/25(日) 21:12 -

引用なし
パスワード
   Worksheetのモジュールに下記のように記述してください。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rng As Range
  Set rng = Intersect(Range("A1:A100"), Target)
  If rng Is Nothing Then Exit Sub
  
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  Dim cel As Range, str As String
  For Each cel In Target
    cel.Value = StrConv(cel.Value, vbNarrow + vbUpperCase)
  Next
  Application.ScreenUpdating = True
  Application.EnableEvents = True
End Sub
・ツリー全体表示

【81537】VBAである範囲に入力した文字種の自動変更
質問  やぶ  - 20/10/25(日) 13:20 -

引用なし
パスワード
   VBAも質問も初心者です。

VBAで例えばA1からA100までのセルに文字が入力されたとき、その入力した文字を自動で大文字で半角に変更されるようにしたいのですが、なかなかうまくつくれません。
Worksheet_ChangeやStrConvを使用することまではわかるのですが、シート全体になったり、色々エラーになったりと原因を特定し修正しようとしても更なるエラーを招いて挫折しました。

説明下手で申し訳ありませんが、どなたかご教授お願いいたします。
・ツリー全体表示

【81536】Re:特定のシートをスキップしたい
発言  マナ  - 20/10/15(木) 20:35 -

引用なし
パスワード
   ▼プラプラ さん:

>回答いただいたことは試してみました。

どんな風に組み込んだのですか。
そのまま、ここにコピペしてください。
・ツリー全体表示

【81535】Re:特定のシートをスキップしたい
質問  プラプラ  - 20/10/15(木) 10:50 -

引用なし
パスワード
   ▼プラプラ さん:
>別ファイルのシート名を取得して一覧表示しようとしています。
>その中の特定のシート名は一覧に表示したくありません。
>
>If ws.Sheets(i).Name = "AAA"
>
>とすると,
>  実行時エラー'13'
>  型一致しません
>というエラーとなります。
>
>dim ws2 as worksheet
>
>set ws2.Name = "AAA"
>If ws.Sheets(i).Name = ws2.Name
>
>のような形でするしかないのでしょうか?


ありがとうございます。

Aというブックにマクロを置いています。
Bというブックのシート名を取得し,Aのブックのセル個々に1シート名を表示しています。Bのブックにはセルに表示したくないシートがありスキップしたいです。

   sheet1    sheet1
   sheet2 →  sheet3  
   sheet3

sheet2 はセルに表示したくないということで,
 if bb.Sheet(i).Name = "sheet2" then
  (bbはブックBを設定してます。)

のように記述すると,エラーになり,セルに格納後,セルで聞いてもエラーとなります。ですが,回答いただいたことは試してみました。
他に考えられることがないでしょうか?
・ツリー全体表示

【81534】Re:配列で高速化したい
お礼  うなぎ E-MAIL  - 20/10/14(水) 13:21 -

引用なし
パスワード
   マナさん
ありがとうございます。

すみません
この記述は少しでも早くしようと後から別のコードから上下間違えてコピペしてしまったみたいです。なので、これがあってもなくてもおなじだけ時間がかかっています。
今、セルを選択する度にこの動作が入ること自体を見直す方向に転換しました。
2次元配列の方法、今後も勉強していきます。
ありがとうございました。
・ツリー全体表示

【81533】Re:配列で高速化したい
発言  γ  - 20/10/13(火) 22:33 -

引用なし
パスワード
   最初の3行の右辺を見直しては?
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
これは元に戻すときの処理ですよね。
・ツリー全体表示

【81532】Re:配列で高速化したい
発言  マナ  - 20/10/13(火) 19:42 -

引用なし
パスワード
   ▼うなぎ さん:

時間がかかっているのは、再計算ではありませんか。
xlCalculationAutomaticを一時的に手動にしてはどうでしょうか。

 
・ツリー全体表示

【81531】Re:配列で高速化したい
お礼  うなぎ E-MAIL  - 20/10/13(火) 11:57 -

引用なし
パスワード
   マナさん
お返事ありがとうございます。
納入先と製品名の組合せが全部で550個あります。

時間を計測してみましたところ、
納入先リストを検索してそれと同じ行の製品名をAM列にコピーするという一連の動作1回に3〜4秒かかっており、同じ納入先の製品が55個あると全部で3分以上かかりました。改めて測ってみると酷いですね。
・ツリー全体表示

【81530】Re:特定のシートをスキップしたい
発言  マナ  - 20/10/12(月) 20:48 -

引用なし
パスワード
   ▼プラプラ さん:

>If ws.Sheets(i).Name = "AAA"

If ws.Name = "AAA" then

If Sheets(i).Name = "AAA" then

ではないでしょうか。

また

>set ws2.Name = "AAA"

これも set はだめ。

 ws2.Name = "AAA"
・ツリー全体表示

【81529】Re:配列で高速化したい
発言  マナ  - 20/10/12(月) 20:41 -

引用なし
パスワード
   ▼うなぎ さん:

>恐らくAM列に抽出する部分を配列方式にすると高速化できると思い、

配列をどのように使えばよいか思いつきませんでした。
代案で、フィルタオプションを使うのはどうでしょうか。
もともと、そんなに遅いと思えないので
速度面で効果はないかもしれませんが
コードは簡潔でわかりやすくなると思います。
・ツリー全体表示

【81528】Re:配列で高速化したい
発言  マナ  - 20/10/12(月) 19:58 -

引用なし
パスワード
   ▼うなぎ さん:

>このコードでも動いているのですが、ヒットする数が多いと非常に遅くなります。

どの程度の数で、どのくらい遅いのでしょうか。
・ツリー全体表示

【81527】Re:特定のシートをスキップしたい
発言  OK  - 20/10/12(月) 17:13 -

引用なし
パスワード
   >一覧表示

どこに一覧表示するのでしょう?
※「配列」で一度検索してみてください。
・ツリー全体表示

【81526】Re:パスをセルにセットできない]
発言  OK  - 20/10/12(月) 15:08 -

引用なし
パスワード
   ダイアログがキャンセルされたときの処理も入れておきましょう。

ht tp://officetanaka.net/excel/vba/file/file02.htm
・ツリー全体表示

【81525】Re:パスをセルにセットできない]
発言  OK  - 20/10/12(月) 15:02 -

引用なし
パスワード
   いろいろおかしな点が・・・。

Dim OpenFileName As String
 OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
 ActiveCell.Value = OpenFileName
・ツリー全体表示

【81524】配列で高速化したい
質問  うなぎ E-MAIL  - 20/10/12(月) 13:12 -

引用なし
パスワード
   Excel2016を使用しています。VBA初心者です。

データというシートの製品名1.列のセルを選択すると、同じ行の納入先列の入力値を、名前シート(元データ)の納入先(H列)で検索し、ヒットした行の製品名(I列)を全てAM列に抽出する。AM列のリストを選択した製品名1.列のセルに入力規則に設定するコードです(抜粋してます)。
このコードでも動いているのですが、ヒットする数が多いと非常に遅くなります。
恐らくAM列に抽出する部分を配列方式にすると高速化できると思い、ネットで同じような内容を調べて色々やってみましたが、配列方式にする部分がうまくいきません。
ご教示お願いいたします。


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True


Dim myRange As Range
Dim rngSearch, juhuku As Range
Dim i As Long
Dim strAdr As String
Dim rngResult As String

Dim clma, clmb, clmb2, rw As Long

clme = Range("データ見出し").Find("代理店", lookat:=xlWhole).Column
clma = Range("データ見出し").Find("納入先", lookat:=xlWhole).Column
clmb = Range("データ見出し").Find("製品名1.", lookat:=xlWhole).Column
clmb2 = Range("データ見出し").Find("製品名2.", lookat:=xlWhole).Column


If Target.Column = clmb Then '製品名1.列のセルを選択したら

 rw = Target.Row

    Set myRange = Worksheets("名前").Range("H2:H500")  '名前シートのH列の検索範囲をセット

    Set rngSearch = myRange.Find(What:=Worksheets("データ").Cells(rw, clma), lookat:=xlPart, LookIn:=xlValues)   '同行の納入先をH列から検索
    
    If rngSearch Is Nothing Then
    
    Exit Sub
    End If
   
    If Not rngSearch Is Nothing Then
     i = 2

      'ヒットした値をAM列に格納
      Worksheets("名前").Range("AM2:AM1000").Clear
      Worksheets("名前").Cells(i, 39).Value = Worksheets("名前").Cells(rngSearch.Row, 9).Value

      'ヒットした値のセルを退避
      strAdr = rngSearch.Address
      
       Do
       
        Set rngSearch = myRange.FindNext(rngSearch)
        If rngSearch Is Nothing Then
          Exit Do
        Else
           If strAdr <> rngSearch.Address Then
            i = i + 1
            Worksheets("名前").Cells(i, 39).Value = Worksheets("名前").Cells(rngSearch.Row, 9).Value
           End If
        End If
       
      Loop While rngSearch.Address <> strAdr

      '名前付き範囲の範囲更新
      rngResult = "名前!" & "$AM$2:$AM$" & i
      
      ActiveWorkbook.Names.Add Name:="検索結果", RefersTo:="=" & rngResult

    End If

  Worksheets("データ").Cells(rw, clmb).Select
  Exit Sub

End If

 
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True

Application.Cursor = xlDefault

End Sub
・ツリー全体表示

【81523】パスをセルにセットできない]
質問  プラプラ  - 20/10/12(月) 13:09 -

引用なし
パスワード
   別ファイルを,ファイルを指定して開きました。
開いたファイルのパスを,セルに出力しようとしています。

OpenFileName As String
OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")

OpenFileNameをセルに設定しようとしていますが,できません。
・ツリー全体表示

47 / 3841 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free