Excel VBA質問箱 IV

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

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


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

【78190】Re:worksheetの宣言の違いがわかりません
発言  β  - 16/5/21(土) 23:38 -

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

同じものです。

VBA の世界でコードを書く場合、規定された様々な名前 (WorkSheet等) を使うわけですが
これらの名前は、それぞれ、『ある大箱』に入っています。
大箱の名前は VAB であったり Excel であったり。
VBE画面でオブジェクトブラウザを表示し、一番上のコンボボックスを開くと、大箱の名前が列挙されています。
このなかで、たとえば Excel を選ぶと、Excel という名前の大箱に入っているメンバが クラス欄に列挙されます。

また、このメンバが、この大箱の中の中箱、さらに、その中のメンバが中箱の中の小箱という場合もあります。

記述としては 大箱名.中箱名.小箱名.なんたら と書くのが正式なんでしょうけど面倒ですよね。
なので、ふつうは、箱の名前を省略します。省略しても、ほとんどのメンバ名はユニークなので
どの箱に入っている名前なのかをVBEが判断してくれます。

なかには Excel大箱の中のApplication中箱のなかのINPUTBOXメソッドと、
VBA大箱の中のInteraction中箱の中のINPUTBOX関数 といったように、おなじ名前のものがあります。

この場合、何もつけずに InputBox と記述すると、VBA大箱の中のものを優先して使うようですね。
なので、InputBoxメソッドを使いたい場合は Application.InputBox と記述します。
・ツリー全体表示

【78189】worksheetの宣言の違いがわかりません
質問  I  - 16/5/21(土) 23:08 -

引用なし
パスワード
   Dim sht As worksheet

Dim sht As Excel.Worksheet

Excel.をつけるのとつけないので何が変わるのかわかりません。
どなたか教えていただけないでしょう。
・ツリー全体表示

【78188】Re:エクセル内のデータ転送に関して
発言  β  - 16/5/20(金) 20:10 -

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

別案もアップしておきます。
2回目、3回目の条件は、先にコメントした通りです。
下記の Test2 が、TODDさんがループで処理しようとしておられた流れになるかと思います。
Test3 は、同じループなら、効率を考えて、一工夫したもの。

F列等の件数が少なければアップ済みの Test でも問題ないかと思いますが
件数が膨大ならTest3ですね。
で、残念ながら、Test2 は、最も効率の悪い方式になります。

Sub test2()
  Dim col As Long
  Dim i As Long
  Dim x As Long
  Dim mx As Long
  
  Application.ScreenUpdating = False
  
  mx = Range("A" & Rows.Count).End(xlUp).Row
  col = Cells(1, Columns.Count).End(xlToLeft).Column
  
  With Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp)).Resize(, 3)
    For i = 1 To .Rows.Count
      .Cells(i, 2).Resize(, 2).ClearContents
      For x = 1 To mx
        If .Cells(i, 1).Value = Cells(x, "A").Value Then
          .Cells(i, 2).Value = Cells(x, "B").Value
          .Cells(i, 3).Value = Cells(x, "C").Value
          Exit For
        End If
      Next
    Next
  End With
  
End Sub

Sub test3()
  Dim dic As Object
  Dim c As Range
  Dim col As Long
  Dim x As Long
  Dim v As Variant
  Dim w As Variant
  
  Set dic = CreateObject("Scripting.Dictionary")
  
  For Each c In Range("A1", Range("A" & Rows.Count).End(xlUp))
    dic(c.Value) = c.Offset(, 1).Resize(, 2).Value
  Next
  
  col = Cells(1, Columns.Count).End(xlToLeft).Column
  v = Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp)).Value
  ReDim Preserve v(1 To UBound(v, 1), 1 To 3)
  
  For x = 1 To UBound(v, 1)
    If dic.exists(v(x, 1)) Then
      w = dic(v(x, 1))
      v(x, 2) = w(1, 1)
      v(x, 3) = w(1, 2)
    End If
  Next
  
  Cells(1, col).Resize(UBound(v, 1), UBound(v, 2)).Value = v
  
End Sub
・ツリー全体表示

【78187】Re:エクセル内のデータ転送に関して
発言  β  - 16/5/20(金) 9:39 -

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

↑ 2回目は I列に、3回目は L列に、・・・・ と
実行前に、検索ワードを記入してあるという前提です。
そうではなく、空白で、常に、F列の検索ワードを自動コピーして使うということなら
少しコードを変更します。
・ツリー全体表示

【78186】Re:エクセル内のデータ転送に関して
発言  β  - 16/5/20(金) 9:31 -

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

要件誤解あれば指摘願います。

Sub Test()
  Dim col As Long
  Dim adr0 As String
  Dim adr1 As String
  
  col = Cells(1, Columns.Count).End(xlToLeft).Column
  adr0 = Range("A1", Range("A" & Rows.Count).End(xlUp)).Resize(, 3).Address
  
  With Range(Cells(1, col), Cells(Rows.Count, col).End(xlUp)).Resize(, 3)
    adr1 = .Cells(1).Address(False, True)
    .Columns("B:C").Formula = "=IFERROR(VLOOKUP(" & adr1 & "," & adr0 & ",COLUMN(B1),FALSE),""登録なし"")"
    .Value = .Value
  End With
  
End Sub
・ツリー全体表示

【78185】エクセル内のデータ転送に関して
質問  TODD  - 16/5/20(金) 8:24 -

引用なし
パスワード
   VBAを使用し始めた初心者です。
宜しくお願い致します。 Excel 2010

(ご質問内容)
列Fに入力している言葉を検索ワードとし列Aを検索、検索ワードと一致した場合、
同じ行のB列、C列に入力された情報をG、Hに移動させ、次の行に入力されている
検索ワードで同様のことをしたいと考えております。

                    一回目        2回目
    A     B   C     F    G   H    I    J  K
1  りんご1  100円  青森  りんご1  100円  青森 りんご1 
2  バナナ1   80円  沖縄  りんご2         りんご2
3  みかん1   120円  兵庫  りんご3         りんご3
4  りんご2   110円  長野  みかん1         みかん1
5                みかん2         みかん2
6                みかん3         みかん3
7                バナナ1         バナナ1


sub くだもの
Dim i as Integer
Dim LastRow as Interger

LastRow = Range("A65500").end(xlup).Row
For i = 1 to LastRow

If range("A" & i).value = "りんご1" then
  Range("G1").value = Range("B" & i)
  Range("H1").value = Range("C" & i)

End if
Next
End sub

りんご1検索後、自動で次にりんご2で検索を行い、
データをG、Hに転送させるには、どうすればよいでしょうか?

また全てのF列の検索ワードのデータを転送後、
A、B、Cに新しい情報を上書きし、I、J、Kにデータを転送できるように
したいと考えております。

大変申し訳御座いませんが、ご教授して頂けないでしょうか?
宜しくお願い致します。

以上
・ツリー全体表示

【78184】Re:ファイルのあるフォルダ名取得
お礼  GG  - 16/5/17(火) 3:57 -

引用なし
パスワード
   早速のお返事ありがとうございます。

試しに参照ページを見て、実験というフォルダにブックを作り
標準モジュールに以下のコードを書きました。

Sub テスト1()
  
  MsgBox ThisWorkbook.Path
  
End Sub

これで目的とする値を得ることができました。


▼カリーニン さん:
>参考になると思います。
>
>ht tp://www.k1simplify.com/vba/tipsleaf/leaf233.html
>
>今回は、
>ThisWorkbook.Path
>で行けると思います。
・ツリー全体表示

【78183】Re:ファイルのあるフォルダ名取得
発言  カリーニン  - 16/5/16(月) 22:08 -

引用なし
パスワード
   参考になると思います。

ht tp://www.k1simplify.com/vba/tipsleaf/leaf233.html

今回は、
ThisWorkbook.Path
で行けると思います。
・ツリー全体表示

【78182】ファイルのあるフォルダ名取得
質問  GG  - 16/5/16(月) 22:00 -

引用なし
パスワード
   よろしくお願いします。WIN7 EXELL2010

ファイルの位置を動かされないように考えています。
対策の一つとして特定のフォルダ内から動かされてしまった場合。
戻すようメッセージを出したいと思います。

Workbook openにコードを書けばよい所まではわかります。

ここでファイルを起動する時に、ファイルがどのフォルダ内にあるか
判定するようなコードはありますでしょうか?
・ツリー全体表示

【78181】Re:VBAでのIE制御について
発言  γ  - 16/5/15(日) 19:53 -

引用なし
パスワード
   何のコメントもなしに、追加で新しいスレッドを立ち上げ、
また削除された。こういうことは止めて欲しい。
・ツリー全体表示

【78180】Re:VBAでのIE制御について
発言  γ  - 16/5/14(土) 22:41 -

引用なし
パスワード
   高いスキルをお持ちのようだが、礼儀は知らないんですね。
・ツリー全体表示

【78178】Re:VBAでのIE制御について
発言  γ  - 16/5/14(土) 12:44 -

引用なし
パスワード
   まったく詳しくないので黙っていたらいいのですが、
コメントがつかないようなので、ひとことだけ申し上げて失礼します。

コード例と対象サイトでも書いてあれば共通認識に立って
議論ができるかもしれませんが、それもなしでは、回答者側の
負荷が大きすぎるのではないですか?

この手の話はサイトの作りにもよる話かもしれず、色々な要素があるんでしょう。
そうした原因を詰めていく作業を回答者に依頼するのはどうかなと思いました。
・ツリー全体表示

【78177】Re:メール送信
回答  γ  - 16/5/14(土) 12:30 -

引用なし
パスワード
   ▼aaa さん:
>γ さん:
>error は でなくて
>実行が終わらない状態になります
了解です。
しかし原因は私にはわかりません。メーカーではないので。

別のコードも引用し、私はこれで送信できましたと書いているのですが、
そちらは実行してみたのですか?
こちらの言うことも聞いてください。

また、常に使っているメールソフトは何ですか?
それを使ったマクロコードを探してみたのですか?
・ツリー全体表示

【78176】VBAでのIE制御について
質問  TT  - 16/5/10(火) 13:38 -

引用なし
パスワード
   現在エクセル2007を使い、VBAでIEを制御しております。

OSが32bitのパソコンだと正常に動きますが、64bitのパソコンだと動かなくなる事例が発生しております。

IEをcreateした後、画面遷移しても遷移先のHTMLを読み込んでもらえません。
(ローカルウィンドウでみるとcreate直後のページのHTMLを読み込んでいます。)


遷移先のHTMLを読み込ませることはできないのでしょうか。
詳しい方ご回答をお願い致します。
・ツリー全体表示

【78175】Re:メール送信
質問  aaa  - 16/5/9(月) 11:10 -

引用なし
パスワード
   γ さん:
error は でなくて
実行が終わらない状態になります
・ツリー全体表示

【78174】Re:グラフ作成 指定範囲をCellsで
お礼  Ken  - 16/5/8(日) 0:12 -

引用なし
パスワード
   ▼β さん:
β さん、ありがとうございます。
Cellsで固定数字を入れて正常に走るかどうかを、まず確認した次第でした。
早くに解決できました。ありがとうございました。
・ツリー全体表示

【78173】Re:グラフ作成 指定範囲をCellsで
発言  β  - 16/5/7(土) 17:39 -

引用なし
パスワード
   ▼Ken さん:
>β さん、ありがとうございます。まちがえていました。
>ActiveChart.SeriesCollection(1).XValues = "='sheet1'!" & Range(Cells(7, 8), Cells(30000, 8)).Address
>でうまくはしりました!
>ありがとうございます!!

??

このコードでも、領域は固定ですよね?
その都度変化するのでは?
変化のたびにコードを変更するのですか?

であれば、最初に、そちらがアップしたコードでも問題ないのでは?
・ツリー全体表示

【78172】Re:グラフ作成 指定範囲をCellsで
発言  マナ  - 16/5/7(土) 17:35 -

引用なし
パスワード
   addressはExternal:=trueを使うと便利ですよ。

あと、こんな書き方も

Sub test()
  Dim r As Range
  
  Set r = Sheets("Sheet1").Range("j7:j3000")
  ActiveChart.SeriesCollection(2).XValues = r
  
End Sub
・ツリー全体表示

【78171】Re:グラフ作成 指定範囲をCellsで
お礼  Ken  - 16/5/7(土) 16:47 -

引用なし
パスワード
   β さん、ありがとうございます。まちがえていました。
ActiveChart.SeriesCollection(1).XValues = "='sheet1'!" & Range(Cells(7, 8), Cells(30000, 8)).Address
でうまくはしりました!
ありがとうございます!!
・ツリー全体表示

【78170】Re:グラフ作成 指定範囲をCellsで
質問  Ken  - 16/5/7(土) 16:36 -

引用なし
パスワード
   β さん、ありがとうございます。
ActiveChart.SeriesCollection(1).XValues = "='sheet1'!" & Range(Cells(7, 30000), Cells(7, 30000)).Address
でいいでしょうか?
でもエラーでとまってしまいます。
・ツリー全体表示

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