Excel VBA質問箱 IV

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

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


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

【79097】リンク(外部)が切れているセルの抽出方...
質問  tt  - 17/5/9(火) 16:20 -

引用なし
パスワード
   他サイト含め同様の質問と回答を読んで試してみましたが、私が超初心者と言うこともあり、なかなかうまく行きません…(Excel2010)

ECサイトで使用するバナーをエクセルで管理しており、下記のようにどのバナーにどの商品画像を使用したかが分かるようなリストを作成し、該当する商品ページのリンクも設置しています。

|  A列  |    B列    |    C列    |    D列     
| バナーa | 商品1(リンク付) | 商品2(リンク付) | 商品3(リンク付) 
| バナーb | 商品4(リンク付) |         |
| バナーc | 商品5(リンク付) | 商品6(リンク付) |




商品が無くなればページも無くなりますし、その商品の画像は使用すべきではないのでバナーからは該当する画像を撤去したいのですが、現状は無くなった商品のリストを作成し、上記のリストと比較して重複の条件式でリンク切れを探しています。

なんとか上記リストだけで完結出来ないものかと思い、VBAでの対処方法を模索しているのですが、なかなか…

リンク切れが分かりさえすれば、「リンク切れのセルの色が変わる」だろうが、「リンク切れのテキストの色が変わる」だろうが、その他の通知方法でももちろん構いません。

ご教示頂けましたら幸いです。
宜しくお願い致します。
・ツリー全体表示

【79096】拡張子なしファイルをメモ帳で開きたい
質問    - 17/5/9(火) 14:27 -

引用なし
パスワード
   ファイルを開きたく、Workbooks.Openを使うとエクセルで開いてしまいます。
拡張子がないファイルを、メモ帳で開く方法を教えてください。
・ツリー全体表示

【79094】エクセルの各シートの合計を表示させる
質問  えり  - 17/5/9(火) 12:26 -

引用なし
パスワード
   sheet2のセルA1に数値を入力する(例えば100)
sheet3のセルA1に数値を入力する(例えば150)
sheet4のセルA1に数値を入力する(例えば30)
   ・・・
sheetは増えていく
sheet1のセルA1に全てのsheetの合計を表示させる
(現状だと280だが、sheetが4.5.6・・・と増えた場合も
全てのsheetの合計を表示したい)

上記のような数式、もしくはVBAは可能でしょうか。
どなたか詳しい方ご教授下さい。

・ツリー全体表示

【79093】Re:一つ下のセルに連番を入れたい
お礼  ポチョムキン  - 17/5/9(火) 11:15 -

引用なし
パスワード
   マナさん
返信遅くなってしまい申し訳ございませんでした。

ご教授いただきました内容で問題なくできました!!
まことにありがとうございました。
大変助かりました!!
・ツリー全体表示

【79092】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/4(木) 17:03 -

引用なし
パスワード
   ▼のんびり さん:

とんでもないミスがありました。

>内側のループが終わってから転記するようにします

といっておきながら、そうなっていませんでした。
あと、JCBシートのループが外側でしたね。

このような感じにすると、
整合・不整合を振り分けることもできます。

Dim 整合 as boolean

for j=1 to …JCBシートをループ
  整合=False
  for m=1 to …MMシートをループ
    If MMシートと同じデータなら then
      整合=True
      Exit For
    end if
  next m
  If 整合=True then
    整合シートに転記
  else
    不整合シートに転記
  end if
next j
・ツリー全体表示

【79091】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/4(木) 9:51 -

引用なし
パスワード
   ▼のんびり さん:

現在のコードをベースに考えてみました。
判定用の変数を1個使います。

--------
あずは、現在のコード

for m=1 to …MMシートをループ
  for j=1 to …JCBシートをループ
    If 同じデータなら then
      転記
    end if
  next j
next m


--------
これを、こんな感じで
内側のループが終わってから転記するようにします。

Dim 整合 as boolean

for m=1 to …MMシートをループ
  整合=False
  for j=1 to …JCBシートをループ
    If 同じデータなら then
      整合=True
      Exit For
    end if
    If 整合=True then
      転記
    end if
  next j
next m

--------

で、整合=Falseなら転記するようにすれば
不整合のデータのみ転記になるかも。
・ツリー全体表示

【79090】Re:オブジェクトが 必要ですというエラー...
発言  γ  - 17/5/3(水) 23:18 -

引用なし
パスワード
   反応がないですね。

折角こちらを閲覧された方のために、有益と思われることを書きます。
それは、「自分で作った変数は小文字で始めるとよい」というものです。

(1)VBAの予約語や、既定のオブジェクトのメソッドやプロパティは
  すべからく大文字で始まります。
  従って、上記ルールを守ると、判別が視覚的につくので便利です。

(2)小文字で入力しても、上記の予約語等は自動的に第一文字が大文字に
  変換されます。
  ですから逆に予約語等のつもりで入力して大文字にならなかったら、
  タイプミスしていることがわかります。
  (もっとも、インテリセンスによる自動メンバ表示を利用することが先ですが)

今回のケースでは、
・まずは Option Explicitの記入(自動設定オプションのセット)が必要だった
・小文字で始めていれば、大文字にかわらないので、既定のオブジェクトでも
 なんでもないことが直ぐに分かったはずです。
・ツリー全体表示

【79089】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/3(水) 21:50 -

引用なし
パスワード
   ▼のんびり さん:

>不要な部分も入っているかと思います

現在のコードで気になることが、もう1点。

もし、一致していたら、内側のループからExit forしないと、
無駄に確認を続行することになります。
・ツリー全体表示

【79088】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/3(水) 21:23 -

引用なし
パスワード
   ▼のんびり さん:

A列C列D列E列が同じものがMMシートにあれば、整合データ
A列C列D列E列が同じものがMMシートになければ、不整合データ

という考えでよいですか。

だとすると、作業列を使って

MMシートのF列にこんな式を入れます。
=A2&"@"&C2&"@"&D2&"@"&E2

で、JCBシートのF列は
=COUNTIF(MMシート!F:F,A2&"@"&C2&"@"&D2&"@"&E2)

これで、1の場合が整合データ、0が不整合データになりませんか。
あとは、オートフィルタで抽出しコピペ
もしくは、フィルタオプションで直接抽出結果を転記

ということを、マクロにするとできそうです。
まずは手作業で、試してみるとよいです。


整合データだけならもっと簡単に作業列使わなくても
フィルタオプションだけで転記できそうですが、
不整合データが思いつきませんでした。
・ツリー全体表示

【79087】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/3(水) 20:33 -

引用なし
パスワード
   ▼のんびり さん:

JCBデータとマスターマネーデータは同じ構成ですか
・ツリー全体表示

【79086】Re:CSVで重複しないデータを抜き出し...
質問  のんびり  - 17/5/3(水) 20:10 -

引用なし
パスワード
   先ほどのVBAに一部コメントをつけました。


  Const JCB_SYA As Integer = 1     '「JCBデータ」ワークシートの「ご利用者」の列
  Const JCB_BI As Integer = 3     '「JCBデータ」ワークシートの「ご利用日」の列
  Const JCB_SAKI As Integer = 4    '「JCBデータ」ワークシートの「ご利用先など」の列
  Const JCB_KINGAKU As Integer = 5   '「JCBデータ」ワークシートの「ご利用金額(¥)」の列

紛らわしいのですが、「整合データ」と同じく「不整合データ」でも
3、5、4、1の順に列を作りたいと思っています。
どうお伝えするのが一番お手間じゃないのかわからず、こんな伝え方でごめんなさい。
・ツリー全体表示

【79085】Re:CSVで重複しないデータを抜き出し...
質問  のんびり  - 17/5/3(水) 20:01 -

引用なし
パスワード
   ▼マナ さん:
>▼のんびり さん:
>偶然、金額が同じデータというものが存在するのでは?

おっしゃる通りです。
とりあえずできるところからと考えて作っていたので
(自分で作る計画の中で)
そこまではカバーしきれないかと思って条件に入れていませんでした。
カバーできるとうれしいですが…

>
>参考までに、できてる3を提示してもらえますか。

不要な部分も入っているかと思います。お見苦しいと思いますが、以下です。


Sub データ照合()
  Const JCB_SYA As Integer = 1   
  Const JCB_BI As Integer = 3     
  Const JCB_SAKI As Integer = 4    
  Const JCB_KINGAKU As Integer = 5  

  Const MM_KINGAKU As Integer = 5  
  
  Const S_KINGAKU As Integer = 2   

  Dim j As Integer   
  Dim m As Integer    
  Dim Cnt As Integer  
  
  Dim JCBKiten As Range 
  Dim MMKiten As Range 
  Dim SeiKiten As Range 

  Cnt = 1        

  Set JCBKiten = Worksheets("JCBデータ").Range("A5")
  Set MMKiten = Worksheets("マスターマネーデータ").Range("A5")
  Set SeiKiten = Worksheets("整合データ").Range("A5")

For m = 1 To MMKiten.CurrentRegion.Rows.Count

 For j = 1 To JCBKiten.CurrentRegion.Rows.Count
    
    If JCBKiten.Cells(j, JCB_KINGAKU).Value = MMKiten.Cells(m, MM_KINGAKU).Value Then

       SeiKiten.Cells(Cnt, 1).Value = _
         JCBKiten.Cells(j, JCB_BI).Value
         
       SeiKiten.Cells(Cnt, 2).Value = _
         JCBKiten.Cells(j, JCB_KINGAKU).Value
         
       SeiKiten.Cells(Cnt, 3).Value = _
         JCBKiten.Cells(j, JCB_SAKI).Value

       SeiKiten.Cells(Cnt, 4).Value = _
         JCBKiten.Cells(j, JCB_SYA).Value


      Cnt = Cnt + 1 
    End If
  Next j
  
Next m
  
    
End Sub
・ツリー全体表示

【79084】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/3(水) 20:00 -

引用なし
パスワード
   ▼のんびり さん:

追加で質問です。

>いくつかの列を選んで抽出したいです。

ならば各ファイルの各列の項目名を教えてください
・ツリー全体表示

【79083】Re:CSVで重複しないデータを抜き出し...
発言  マナ  - 17/5/3(水) 19:54 -

引用なし
パスワード
   ▼のんびり さん:
偶然、金額が同じデータというものが存在するのでは?

参考までに、できてる3を提示してもらえますか。
・ツリー全体表示

【79082】Re:CSVで重複しないデータを抜き出し...
質問  のんびり  - 17/5/3(水) 19:36 -

引用なし
パスワード
   補足です。

重複しない、というのは
「金額」のみを比べるということでokです。
説明不足で申し訳ございません。
・ツリー全体表示

【79081】CSVで重複しないデータを抜き出したい
質問  のんびり  - 17/5/3(水) 19:31 -

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

4つのワークシート中、2つに
「日付」や「店」「金額」などといったデータが入っています。
この中から「金額」が重複していないデータを抽出したいと思っています。

具体的に説明すると
1.クレカデータ(金額がE列の5行以降に入っている)
2.家計簿データ(金額がE列の5行以降に入っている)
3.整合データ(金額をB列の5行以降に入れる)※作成済み
4.不整合データ(金額をB列の5行以降に入れる)←これを作りたい


1.に入っているが2.に入っていない1.のデータを抽出し
4.に入れたい。
抽出するデータも行まるごとではなく
いくつかの列を選んで抽出したいです。

ちなみに、1.と2.の金額が一致するデータを抽出することは成功していて
3.に入っている。それを使用することも可能です。

一致ができたので、不一致も簡単かと思いきや
全然違いますよね…??
色々と調べてみたのですが理解できず、自分のものにカスタマイズできずにいます。

ゴールデンウィークのお休みの所恐縮です。
よろしくお願いいたします。
・ツリー全体表示

【79080】Re:一つ下のセルに連番を入れたい
発言  マナ  - 17/5/2(火) 18:29 -

引用なし
パスワード
   ▼ポチョムキン さん:

本題と別に、

>Sheets("SHEET1").Range("C99999").End(xlUp)

もし、ボタンがあるシートに対し実行するのであれば

Sheets("SHEET1").は不要で

Range("C99999").End(xlUp)

これだけもよいです。

また、"C99999" が、想定される最大行数より大きい値という意味なら
こんな記述もできます。

Range("C" & Rows.Count).End(xlUp)
・ツリー全体表示

【79079】Re:一つ下のセルに連番を入れたい
発言  マナ  - 17/5/2(火) 18:23 -

引用なし
パスワード
   ▼ポチョムキン さん:

マクロの記録で、キーワードが AutoFill かなと予想をつけます。

で、「AutoFill エクセル」でネット検索すると
例えばこんなのがみつかります。

ht tp://www.moug.net/tech/exvba/0050146.html


そこの使用例をまねすると、こんな感じです。

Sub test()
  
  With Sheets("SHEET1").Range("C99999").End(xlUp)
    .AutoFill Destination:=.Resize(2)
  End With
  
End Sub

あるいは、

Sub test2()
  Dim r As Range
  
  Set r = Sheets("SHEET1").Range("C99999").End(xlUp)
  r.AutoFill Destination:=r.Resize(2)

End Sub
・ツリー全体表示

【79078】Re:一つ下のセルに連番を入れたい
お礼  ポチョムキン  - 17/5/2(火) 17:28 -

引用なし
パスワード
   マナさん

早速のご連絡、ありがとうございます。

実はそれも試してみたのですが、自分の読解力と応用力がなく
フィルコピー範囲を「アクティブセルとその一つ下のセル」という
式に変更ができなかった経緯がございます。

申し訳ございませんが、GWの関係上、次に本ページを確認できるのが
週明けとなってしまうこと、お詫び申し上げます。
・ツリー全体表示

【79077】Re:一つ下のセルに連番を入れたい
発言  マナ  - 17/5/2(火) 16:25 -

引用なし
パスワード
   ▼ポチョムキン さん:

>その先がどうしてもうまくいきません。

1)「X0003」のセルを選んで、
2)1個下にフィルコピー

この操作を、「マクロの記録」してはどうでしょうか。
・ツリー全体表示

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