Excel VBA質問箱 IV

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

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


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

【79112】Re:リンク(外部)が切れているセルの抽...
発言  tt  - 17/5/12(金) 16:46 -

引用なし
パスワード
   ▼γ さん:
>・URLを引数にとり、
>・それがリンク切れかどうかを返す、
>function プロシージャを提供しようと思いますが、
>それでOKですか?

ご返答ありがとうございます!

ご確認頂いた内容への回答が遅くなってしまい申し訳ございません。
超初心者ですので、「function プロシージャ」がどういうものかを必死に調べてました。

ご推察の通りです!
ご確認頂いた内容でご教示頂ければ幸いです。
何卒よろしくお願いいたします!
・ツリー全体表示

【79111】VBAの1か月の日にちを表記し”日”も一...
質問  かな  - 17/5/12(金) 15:32 -

引用なし
パスワード
   一応対象の月日1〜30はマクロで実行できたのですが、それに付随して”日”という文字の追加の仕方がわからないのですが、どうすればいいのでしょうか?

一応コードはこの様になっています。


Sub kake()
Dim a As Byte, w As Byte

  w = 0
  For i = 1 To 31 Step 1
    w = w + 1
    Cells(5 + i, 1) = w
  Next
 
End Sub
・ツリー全体表示

【79110】Re:VBAのコードの意味
お礼  なまず  - 17/5/12(金) 15:17 -

引用なし
パスワード
   ▼β さん:
回答ありがとうございます。とてもわかりやすかったです。
次からはしっかり自分の意図したLBoundを明示します。
・ツリー全体表示

【79109】Re:VBAのコードの意味
発言  β  - 17/5/12(金) 11:22 -

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

「VBA 配列」といったもので検索してわかりやすそうなページを選んで
目を通しておかれることを推奨します。

ところで、「よく目にする」Dim a(100000) As Integer や Dim a(100,100) As Integer
はい、よく目にしますね。この記述方式。
でも個人的には、非常によくない記述方式だと思っています。

そのことは後で振れるとして、

Dim a As Integer 、これは Integer型の a という変数を1つだけ既定しますね。

一方、たとえば a という『線』があったとします。
で、この線上に、いくつかの小部屋を配置。aの1号室、aの2号室、・・・・・。
こういったものを 1次元配列 と呼び、Dim a(1 To 5) といったように記述します。
ここで 1 To 5 は LBound To UBoound 、つまり 何号室から何号室まで用意するかを
指定するものです。

a(5) は 配列a の中の 5号室 にあたります。

もう1つ、a という「縦横を持った面」を考えます。
この面をたてよこに区切って、いくつかの小部屋をつくります。
こういったものを 2次元配列 とよび、Dim a(1 To 5,1 To 10) といったように記述します。
LBound To UBound が 縦分と横分、2つでてきます。
縦としては 1階から5階まで、横としては 1号室から10号室までを用意しています。

a(3,6) は 配列a のなかの 3階の6号室になります。


で、この LBound を『横着にも』省略すると、VBAでは(Option Base 1 既定をしない限り)
「0 から」とみなします。
ですから Dim a(5) は 要素が 0 (0号室) から 5 までの 6 つの要素(小部屋)を規定することになります。

★配列規定時は、横着をせず、必ず「自分が意図した」LBound を明示しましょう。
・ツリー全体表示

【79108】VBAのコードの意味
質問  なまず  - 17/5/12(金) 9:49 -

引用なし
パスワード
   VBAの学習をしているのですが、「Dim a(100000) As Integer」や
「Dim a(100,100) As Integer」という変数をみかけるのですが、
この(1000000)とか(100,100)とはどういう意味なのでしょう?
・ツリー全体表示

【79107】Re:文字が含まれていたら転記
発言  通りすがり  - 17/5/12(金) 1:06 -

引用なし
パスワード
   ここの板のポリシーに記載されている事柄です。

>もしマルチポストをするのなら、可能な限り「○○にも同じ質問を出しました」ということを宣言してください
・ツリー全体表示

【79106】Re:文字が含まれていたら転記
発言  β  - 17/5/11(木) 19:58 -

引用なし
パスワード
   ▼マリモ さん:

>種類、重さ、地域を紐付て表示したいのですが・・。

どのセルに、どのように表示するのですか?

>種類、重さ、地域を紐付て表示したいのですが・・。

たとえば りんごもぶどうもすき という文字列の場合、
何をどのように表示するのですか?
・ツリー全体表示

【79105】文字が含まれていたら転記
質問  マリモ  - 17/5/11(木) 16:43 -

引用なし
パスワード
   Sheet1に
a1=りんごがすき
a2=ぶどうがきらい

Sheet2に
a1=種類 b1=重さ c1=地域
a2=りんご b2=500g c2=青森
a3=ぶどう b3=300g c3=山梨

上記のように書かれているとします。
Sheet1のA列には抽出したい文字が含まれており
Sheet2のA列の種類の文字が含まれていたら
種類、重さ、地域を紐付て表示したいのですが・・。

何かいい方法がございましたら
ご教示いただけるとありがたいです。 
・ツリー全体表示

【79104】Re:チェックボックスがONの場合に選択し...
お礼  ペーターパン  - 17/5/11(木) 10:32 -

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

モジュールレベルで変数を宣言する。
if not構文で宣言する。
どちらも今の私ではたどり着けない答えでした。

Worksheet_SelectionChangeの場合、イベント発生の度に変数がどうなっているかよく考えなくてはいけないのですね。
自分が試しに作ったものだと太字が延々と作られ続けた理由がよくわかりました。

壁にぶつかってまた1つ成長できました。
これからも精進します。

>▼ペーターパン さん:
>
>元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?
>
>
>Option Explicit
>
>Dim bLine As Range
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  If Not bLine Is Nothing Then
>    bLine.Font.Bold = False
>    Set bLine = Nothing
>  End If
>  If CheckBoxes("ChkBx1").Value = xlOn Then
>    Selection.EntireRow.Font.Bold = True
>    Set bLine = Selection.EntireRow
>  End If
>End Sub
・ツリー全体表示

【79103】Re:エクセルの各シートの合計を表示させる
お礼  えり  - 17/5/11(木) 8:51 -

引用なし
パスワード
   ありがとうございました!
dummyのシートを置くことで解決できました!!


▼γ さん:
>sheet1が最左の位置にあるシート
>sheet3が最右の位置にあるシート
>とします。
>
>このとき
>=SUM(Sheet1:Sheet3!A1)
>とすると3つのシートのA1の合計が得られます。
>
>とりあえずは、こんなことではどうですか?
>
>一番右にあるシート名が変わるたびに変更するのが手間であれば、
>何もないダミーのシート(シート名 dummy とします)を一番右に置いておき、
>=SUM(Sheet1:dummy!A1)
>などとすれば変更する必要はなくなります。
・ツリー全体表示

【79102】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/5/10(水) 18:22 -

引用なし
パスワード
   ▼ペーターパン さん:

元々アップしたコードの Cellsを必要行のみにするとどうでしょうか?


Option Explicit

Dim bLine As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Not bLine Is Nothing Then
    bLine.Font.Bold = False
    Set bLine = Nothing
  End If
  If CheckBoxes("ChkBx1").Value = xlOn Then
    Selection.EntireRow.Font.Bold = True
    Set bLine = Selection.EntireRow
  End If
End Sub
・ツリー全体表示

【79101】Re:チェックボックスがONの場合に選択し...
質問  ペーターパン  - 17/5/10(水) 10:36 -

引用なし
パスワード
   ▼β さん:
お礼が遅くなり申し訳ありません。
ご尽力頂きありがとうございます。
あれからすぐマクロを組み使用しております。
今回、以下のような改善要望が出ました。

改善要望:エクセルの動作が少し重いので改善できないか。

確かに、毎回アクティブセルのボールドを解除するよう命令しているので、
一度下記のように書きました。
これですとアクティブセルの太字が残ってしまうので、コマンドボタンを押すとセルの太字が通常に戻るようにするなどの対策を取ろうと思っています。
もっとスマートな方法はあるのでしょうか?
ご教示頂ければ幸いです。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If CheckBoxes("ChkBx1").Value = xlOn Then
    Cells.Font.Bold = False ←★ご教示頂いたマクロのこの部分を移動しました。
    Selection.EntireRow.Font.Bold = True
  End If
End Sub


>▼ペーターパン さん:
>
>もう、ご覧にならないかもしれませんが。
>
>そういうことだったんですか。
>要件をすっかり誤解していました。
>
>であれば、以下の2つの方法が考えられます。
>
>1.任意の行が選択されたときに、その時点のチェックボックスの選択の状態をみて
> チェックが入っていたら、選択された行を太字にする。
>
> チェックボックスにはマクロ登録をしません。していれば消してください。
> で、シートモジュールに。
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  Cells.Font.Bold = False
>  If CheckBoxes("チェック 1").Value = xlOn Then  '★
>    Selection.EntireRow.Font.Bold = True
>  End If
>End Sub
>
> ★のところ、実際のコントロール名に直してください。
>
>2.チェックボックスにチェックが入った時点で、その時に選択されていた行を太字にする。
> (これは、やってみると、操作が面倒というか、スムーズじゃないなと思いましたが)
>
> シートモジュールは使いません。記述があれば消してください。
> 標準モジュールに以下のマクロを書き、チェックボックスにマクロ登録します。
>
>Sub Test()
>  Cells.Font.Bold = False
>  If ActiveSheet.CheckBoxes(Application.Caller).Value = xlOn Then Selection.EntireRow.Font.Bold = True
>End Sub
・ツリー全体表示

【79100】Re:エクセルの各シートの合計を表示させる
回答  γ  - 17/5/9(火) 20:57 -

引用なし
パスワード
   sheet1が最左の位置にあるシート
sheet3が最右の位置にあるシート
とします。

このとき
=SUM(Sheet1:Sheet3!A1)
とすると3つのシートのA1の合計が得られます。

とりあえずは、こんなことではどうですか?

一番右にあるシート名が変わるたびに変更するのが手間であれば、
何もないダミーのシート(シート名 dummy とします)を一番右に置いておき、
=SUM(Sheet1:dummy!A1)
などとすれば変更する必要はなくなります。
・ツリー全体表示

【79099】Re:拡張子なしファイルをメモ帳で開きたい
回答  γ  - 17/5/9(火) 20:40 -

引用なし
パスワード
   こんな方法ではどうですか?

Sub test()
  Shell "notepad.exe " & "D:\tmp\aaa", vbNormalFocus
End Sub
・ツリー全体表示

【79098】Re:リンク(外部)が切れているセルの抽...
発言  γ  - 17/5/9(火) 20:33 -

引用なし
パスワード
   ・URLを引数にとり、
・それがリンク切れかどうかを返す、
function プロシージャを提供しようと思いますが、
それでOKですか?

質問を読み違えている可能性があるので、確認です。
・ツリー全体表示

【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
・ツリー全体表示

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