Excel VBA質問箱 IV

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

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


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

【79117】Re:リンク(外部)が切れているセルの抽...
お礼  tt  - 17/5/15(月) 12:00 -

引用なし
パスワード
   ▼γ さん:
ご回答ありがとうございます!
ご教示頂いたとおりにやってみます。

結果は改めてご報告させていただきますね!
・ツリー全体表示

【79116】Re:リンク(外部)が切れているセルの抽...
発言  γ  - 17/5/13(土) 11:54 -

引用なし
パスワード
   訂正です。
Set ht = CreateObject("Msxml2.ht.6.0")
のところ誤変換されてしまっています。

"Msxml2.ht.6.0"の htのところを
アルファベットで エイチ ティー ティー ピー としてください。

# > 迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。
# ということで、ht・・の4文字は入力を受け付けてくれないのです。
# それで変数をhtの二文字にしたのだけど、CreateObjectのところも同時に
# 誤変換してしまった次第。
・ツリー全体表示

【79115】Re:リンク(外部)が切れているセルの抽...
回答  γ  - 17/5/13(土) 8:10 -

引用なし
パスワード
   以下のようなものを念頭に置いていました。

Dim ht As Object

'' url がネット上にあれば Trueを返し、なければ Falseを返す。
Function checkURL(url As String) As Boolean
  If ht Is Nothing Then
    Set ht = CreateObject("Msxml2.ht.6.0")
  End If
  ht.Open "HEAD", url, False
  ht.send
  checkURL = ht.Status = 200
End Function

'テスト検証
Sub test()
  Dim url As String
  
  url = "ht tp://www.vbalab.net/img/spacer.gif" ' スペース取る必要あり
  Debug.Print checkURL(url)
End Sub

前回うっかり回答コメントをしてしまいましたが、
質問を読み返すと、ECサイトの運用にかかわる方なんでしょうか。
それなら、周りに専門家がいくらでもいるでしょう。
こうした質問などせずに、内部で解決するべきではないですか?

なお、認証への対応が必要なはずで、上記のものでは足りません。
それは承知しています。
もし、Basic認証であれば、
AuthorizationヘッダーにBase64エンコード処理を施したIDやpwdをセットする
方法で対応できるはずです。ネット上にサンプルもあります。

業務でしょうから、こうした場で質問するより、
きちんと内部で対応されることをお勧めします。
組織としてきちんと対応するべき事柄です。
不測のことが起きても、責任は負いかねます。
・ツリー全体表示

【79114】Re:VBAの1か月の日にちを表記し”日”も...
お礼  かな  - 17/5/12(金) 17:22 -

引用なし
パスワード
   ▼亀マスター さん:
とてもわかりやすく、その他のご指摘もご教示いただきまして大変恐縮しております。
回答ありがとうございました。
・ツリー全体表示

【79113】Re:VBAの1か月の日にちを表記し”日”も...
回答  亀マスター  - 17/5/12(金) 17:06 -

引用なし
パスワード
   考え方で大きくふたつあります。

まず、単純に「1日」「2日」という文字列をセルに入れたいということであれば、

Dim i as Integer
For i = 1 to 31
  Cells(5 + i, i) = i & "日"
Next i

のようにすればいいです。
i & "日" で、数字+「日」になります。
示されたコードではわざわざwを使っていますが、これは不要でしょう。

ただし、これだと入力した情報が文字列として扱われ、計算するための数字として使えません。
(「1日」というデータに対して+1しても「2日」とはできません)
計算に使いたいのであれば、上記のコードで「 & "日"」の部分を除き、
VBAではなくエクセルのシート上でセルの書式を「0日」としてください。
それなら、内容としてはただの数字だが、表示は「1日」のように表示されます。


なお、示されたコードでいくつか気になることがあります。

まず、変数 iを使っているのに、それを宣言しているところがありません。
設定で変数の宣言を強制するようにしていなければこれでも動きますが、バグの元になるので、変数の宣言は強制するようにしておいた方がいいでしょう。

また、変数aとwの型をByte型にしているのも気になります。
小さな数字を入れるのだからByte型でいいだろうということなのかもしれませんが、一般的にByte型を使う場合にはそれなりに理由があり、整数を扱うのであれば通常はInteger型かLongを使います。

ForループでStep 1とするのも無意味ですね。
Step 1は書かなくてもForループでは1ずつ増えるようになっていますし、1以外ずつ増えたり減ったりする場合だけ記述すればいいです。
・ツリー全体表示

【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ですか?

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

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