Excel VBA質問箱 IV

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

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


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

【79030】Re:二つのセルの数値の判定
発言  β  - 17/4/17(月) 19:30 -

引用なし
パスワード
   ▼トキノハジメ さん:

不思議ですねぇ。

もし、このコードの下にちゃんと End If が記述されているなら、少なくともコンパイルエラーにはなりません。

If Range("F37").Value <= -2 And Range("F37") >= -6 And Range("G37").Value >= 4 And Range("G37").Value <= 6 Then

  Range("B30").Value = "普通 A"

End If

End If がないと、もちろんエラーですが、その時には End If が無いという明確な
メッセージになりますので、気づかれるはずで、ちゃんと End If の記述はあるのだと思います。

★コードを書き直しました ということですが、掲示板上で書き直したのですか?
 もし、そうであれば、実際のコードとは異なっているかもしれませんので、検討できません。
・ツリー全体表示

【79029】Re:二つのセルの数値の判定
質問  トキノハジメ  - 17/4/17(月) 18:32 -

引用なし
パスワード
   ▼トキノハジメ さん:
>▼トキノハジメ さん:
>▼β さん:
>ありがとうございます。
>
>If Range("F37").Value <=-2 And Range("F37").Value >= -6 And Range("G37").Value >= 4 and Range("G37").Value <= 6 Then
>
>Range("B30").Value = "普通 A"
>
>上記のコードですが Then のところが 黒くなります。構文エラーです。
>
>宜しくお願い致します。
>
>コードを訂正いたしました。
・ツリー全体表示

【79028】Re:二つのセルの数値の判定
質問  トキノハジメ  - 17/4/17(月) 18:31 -

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

If Range("F37").Value <=-2 And Range("F37") >= -6 And Range("G37").Value >= 4 and Range("G37").Value <= 6 Then

Range("B30").Value = "普通 A"

上記のコードですが Then のところが 黒くなります。構文エラーです。

宜しくお願い致します。

コードを訂正いたしました。
・ツリー全体表示

【79027】Re:二つのセルの数値の判定
発言  β  - 17/4/17(月) 18:22 -

引用なし
パスワード
   ▼トキノハジメ さん:

掲示板にアップする際には、『本物のコード』をコピペでアップしてください。
さもないと、掲示板上での手打ちの際のミスなのか、本当のミスなのかがわからなくなりますので。

Rage("G37") などという記述は 構文エラー 以前の問題ですから、これは Range だとして
Range("F37"),Value  この ,(カンマ) 。もしこう書かれているなら構文エラーですね。
.(ピリオド) にしてください。

これも、いやいや、実際はそうなっているということなら、やはり実際のコードを
アップしてもらわなければコメントできません。
・ツリー全体表示

【79026】Re:二つのセルの数値の判定
質問  トキノハジメ  - 17/4/17(月) 17:13 -

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

If Range("F37"),Value <=-2 And Rane("F37") >= -6 And Range("G37").Value >= 4 and Rage("G37").Value <= 6 Then

Range("B30").Value = "普通 A"

上記のコードですが Then のところが 黒くなります。構文えらーです。

宜しくお願い致します。
・ツリー全体表示

【79025】Re:二つのセルの数値の判定
発言  β  - 17/4/17(月) 16:38 -

引用なし
パスワード
   &nbsp;
▼トキノハジメ さん:

掲示板上で数字の部分が文字化けしていますが、
仮に B37 が 10 で、C37 が 20 の時 とします。

>B30 は B という式を考えたのですが

『式』とは、数式のことですか? それとも マクロコードのことですか?

>上手くいかなかったので、おしえてください。

考えて試してみたものをアップされれば、どちらの質問かがわかります。

しずれにしても、『考えて試したもの』をアップして、どこがどううまくいかないのかを
説明するのが掲示板での質問のきほんですけどねぇ。

これが数式なら B30: =IF(AND(B37=10,C37=20),"B","")
こんなことでしょうけど。
・ツリー全体表示

【79024】Re:等間隔の行数取得
質問  boss  - 17/4/17(月) 16:17 -

引用なし
パスワード
   以前させていただいた質問の内容が誤っており、以下のとおり訂正させてください。

K13、K20、K27・・・、と等間隔で「あああ」と入力されており、K列の最後に「最終」
と入力されている行があります。
1.にて「最終」行を取得 2.にてK13を先ずは取得し 3.にて「最終」行までK20、K27
以降を取得しようとしておりますが、3.のK20以降が取得できません。
尚、3.は別のfor分中にある構文です。
お手数ですがご教授の程よろしくお願いいたします。

  '1.「最終」行を決定
  maxrow = sh1.Cells(Rows.Count, "K").End(xlUp).row
  ttlrow = 0
  For row = 7 To maxrow
    If sh1.Cells(row, "K").Value = "最終" Then
      ttlrow = row
      Exit For
    End If
  Next
  If ttlrow = 0 Then '"最終"の合計行
    MsgBox ("最終の行がありません" & vbLf & "処理を打ち切ります")
    Exit Sub
  End If

  '2.「あああ」行を取得
  maxrow = sh1.Cells(Rows.Count, "K").End(xlUp).row
  ttlrow2 = 0
  For row2 = 12 To maxrow2
    If sh1.Cells(row2, "K").Value = "あああ" Then
      ttlrow2 = row2
      Exit For
    End If
  Next
  If ttlrow2 = 0 Then
    MsgBox ("あああ行がありません" & vbLf & "処理を打ち切ります")
    Exit Sub
  End If


  '3.以降の「あああ」行を取得
  For row2 = ttlrow2 + 1 To maxrow
    If sh1.Cells(row2, "K").Value = "あああ" Then
      ttlrow2 = row2
    End If
  Next
  If ttlrow2 = 0 Then
    MsgBox ("あああ行がありません" & vbLf & "処理を打ち切ります")
    Exit Sub
  End If
・ツリー全体表示

【79023】二つのセルの数値の判定
質問  トキノハジメ  - 17/4/17(月) 14:37 -

引用なし
パスワード
   いつもおせわになります。

表題のことでおしえてください。

B37が-2&#12316;-6で、C37が 4&#12316;6 の時 B30 は B という式を考えたのですが、

上手くいかなかったので、おしえてください。

よろしくおねがいいたします。

・ツリー全体表示

【79022】Re:エクセルへの写真画像の貼り付け
回答  ひでとし E-MAIL  - 17/4/15(土) 9:58 -

引用なし
パスワード
   たびたびの回答を有り難うございます。

いくつか説明不足でした。職場のパソコンは富士通製のノートパソコンでwin10 64bit Office Professional Plus 2016 64bit が組み込まれた状態で従業員全員に1台ずつ与えられています。その環境ですとAddPictureの命令がうまく機能してくれません。下記のマクロです。自宅は、win10 32bit office2016 32bitで動きますが、最初の投稿と同様で画像が少し小さく取り込まれてしまいます。

Private Sub worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim fd As FileDialog
Dim Shp As Shape
Dim cell_r As Double, gazou_r As Double

Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Filters.Clear
fd.Filters.Add "画像ファイル", "*.bmp; *.gif; *.jpg; *.jpeg; *.png", 1
If fd.Show Then
   Set Shp = Me.Shapes.AddPicture(fd.SelectedItems(1), _
           msoFalse, msoTrue, Target.Left, Target.Top, 1, 1)
  
   Shp.ScaleHeight 1, msoTrue
   Shp.ScaleWidth 1, msoTrue
   Shp.LockAspectRatio = msoTrue
   With Shp
     cell_r = Target.Height / Target.Width
    gazou_r = .Height / .Width
    
    If cell_r < gazou_r Then
      .Height = Target.Height
    Else
      .Width = Target.Width
    End If

    'セルの中央(横方向/縦方向の中央)に配置
    .Left = Target.Left + (Target.Width - .Width) / 2
    .Top = Target.Top + (Target.Height - .Height) / 2
  
   End With
End If
  Set fd = Nothing
  Cancel = True

End Sub

取り込む画像は、ほとんどが顔写真です。したがってデジカメを縦にして写真を撮りそのファイルをそのままパソコンに取り込んでいます。(ソフトは使わずに直接SDカードからコピー)また、回転等はしていません。

削除については、ルールがわかっていませんでした。申し訳ありませんでした。
・ツリー全体表示

【79021】Re:エクセルへの写真画像の貼り付け
発言  β  - 17/4/15(土) 8:55 -

引用なし
パスワード
   ▼ひでとし さん:

いくつかコメントしておきます。

>win10 64bitではAddPictureが使えないようです。

そうなんですか?
当方 win7+xl2010、win10+xl2013 いずれでも、問題なく AddPicture は使えます。
もっとも win はいずれも64Bit ですが、エクセルは いずれも 32Bitです。

>win10は、画像の縦横問題があるようですが

デジカメでカメラを縦にして撮ったものでしたか。
スマホでは、PCに取り込んだ際に、それなりに(?)縦なら縦の状態で
取り込まれるようですが、デジカメの場合はあくまで横にひっくり返った状態で
取り込まれるようで、それを画像ソフトで回転させて、保存しなおしたりしますけど
そういう操作をされたんでしょうか?
詳しくないですが、回転させたとしたら、その際に、なんらかの補正が行われている可能でいもありますね。

vista でどうなるか、環境がないのでわかりません。

>回答がなければ何日かしてこの投稿を削除させていただきたいと思います。

レスが付いたトピは、もう ひでとしさんの所有物ではなく掲示板全体の
共有物ですから削除は具合悪いでしょ。
(やったことはないですが、質問箱の機能としても、それはできないのでは)

解決ではないですが、トピを閉じる というコメントをアップされたらよろしいのでは?
・ツリー全体表示

【79020】Re:エクセルへの写真画像の貼り付け
質問  ひでとし E-MAIL  - 17/4/15(土) 3:43 -

引用なし
パスワード
   返信を有り難うございました。
昨年までは、職場のvistaのパソコンで AddPicture を使ったVBAで画像とりこみをしていました。ところが今年になって職場のパソコンが変わり、使えなくなりました。win10 64bitではAddPictureが使えないようです。そこで今回投稿したVBAにしました。Pictures.Insertは使えるようです。ところが、今回の現象です。わかったことは、カメラを縦にしてwin10で取り込んだ画像について起こります。win7やvistaでは、問題ありませんでした。また、何かのソフトで画像を保存し直すとうまくいきます。win10は、画像の縦横問題があるようですが、よくわかりませんでした。
何かわかれば教えていただきたいです。ただ、VBAの問題ではないような気もしますので回答がなければ何日かしてこの投稿を削除させていただきたいと思います。有り難うございました。
・ツリー全体表示

【79019】Re:エクセルへの写真画像の貼り付け
発言  γ  - 17/4/14(金) 23:18 -

引用なし
パスワード
   私は"デジカメで撮った画像"というものが手元にないので、
何事かを申し上げる材料がありません。

> VBAに問題があるのか教えて下さい。
もちろん自分の手元にある画像で実行してみていました。
たぶんそれ自体には問題がないだろうとは想像しましたが、
絶対に問題がないと保証できる根拠もありませんし、
リスクをこちらが取って保証しなきゃいけない義理もなにも
ないですわね。

ステップ実行して、自分の想定とどの段階で異なるか調べるのは
それは質問者さんの仕事でしょう。

・オリジナル画像をペイントで呼び出してそのまま上書き保存したものと
・オリジナルとで
ファイルとしてどう違うのか(サイズ、画像形式、カラー(色じゃないほう)とか、枠とか)
調べてみてはどうでしょうか。
・ツリー全体表示

【79018】Re:エクセルへの写真画像の貼り付け
発言  β  - 17/4/14(金) 20:57 -

引用なし
パスワード
   ▼ひでとし さん:

おそらく、閲覧した側で実際にやってみて、そういった事象にならない、
再現ができない なので、回答ができないといううことではないでしょうか。
(私も、あれこれやってみましたが、再現しません)

考えられるとすれば、そのままの写真というものが わくの部分が背景色透明で
目に見えない形で存在。
ペインと等で開いて別名で保存したものは、その枠の部分がなくなった形になっている。

でも、そういうことは、あくまで想像ですし、こちらからは見えませんので。

マクロから離れて、また拡大・縮小も忘れて、単純に その 2つの画像ファイルを
シートに貼り付けたときに、
それぞれを選択して表示されるシェープとしての外枠、全くおなじでしょうか?

一方は写真の中身にそった外枠、一方はそれより一回り大きめの外枠になっている
ということはありませんか?
・ツリー全体表示

【79017】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/4/14(金) 20:49 -

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

&nbsp;
▼ペーターパン さん:

全く別のポイントで。

太字にしたり通常にしたり、そういったことを行う行が何行あるのかわかりませんが
そのすべての行にチェックボックスを配置するのも大変ではないですか。

しかもチェックボックスを、『正確に』その行の中におさめなければいけません。
ちょっと上にずれたりすることって無きにしも非ず。
操作者がうっかりと右クリックで選択してずらしてしまうかもしれませんし。

チェックボックス制御をやめ、たとえばフォントの状態をかえたい行の任意のセルを
ダブルクリックして処理するということも考えられます。
以下の例では、どの行に対しても操作可能ですが、もちろん、何行目以降とか何行目から
何行目までの間とか、その行の特定の列に特定の文字が入っている行のみとか、
そういった条件はいくらでもつけられます。

シートモジュールに。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  Target.EntireRow.Font.Bold = Not Target.Font.Bold
End Sub
・ツリー全体表示

【79016】Re:エクセルへの写真画像の貼り付け
発言  ひでとし E-MAIL  - 17/4/14(金) 20:43 -

引用なし
パスワード
   回答が一つもつきませんが、質問の仕方が悪かったでしょうか。ご指摘ください。よろしくお願いします。
・ツリー全体表示

【79015】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/4/14(金) 15:37 -

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

一例です。
以下のマクロを 標準モジュールに記載して、該当のチェックボックスをすべて選んで
この同じマクロを登録してください。

なお、現行のコード、いったんシート状のすべてのセルの文字の太さを通常にし
そのあと、該当の行の文字の太さのみを太字にしていますが、太字にするのは
チェックボックスが選ばれたときのみと考えれば、その行についてのみ
選ばれれば太字、選択が外れれば通常という制御にしました。

Sub フォント切り替え()
  Dim flg As Boolean
  
  With ActiveSheet.CheckBoxes(Application.Caller)
    If .Value = xlOn Then flg = True
    .TopLeftCell.EntireRow.Font.Bold = flg
  End With
  
End Sub
・ツリー全体表示

【79014】Re:チェックボックスがONの場合に選択し...
お礼  ペーターパン  - 17/4/14(金) 14:59 -

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

私感ではありますが、トラブル等が起きにくいフォームツールを使いたいです。
ある特定のワークシート場でのみ機能させたいと思っております。

下記、丁寧な説明ありがとうございます。
動かない理由についてはよく分かりました。
勉強になります。

▼β さん:
>▼ペーターパン さん:
>
>よく読むと Application.Caller を使っておられるので
>フォームツールのチェックボックスなんですね。
>
>であれば 値そのものは xlOn や xlOff でいいのですが
>この場合は、自分でマクロを最初から最後まで書いて
>それを チェックボックスにマクロ登録するわけですね。
>
>名前を checkbox1_click とされるのは、勝手というか、すきにしたらいいのですが
> 
>Private Sub checkbox1_click(ByVal Target As Range)
>
>この ( ) 内の引数、これは誰もセットしてくれません。
>
>しかも、この形だと、マクロ登録しようにも、登録できません。
>
>かつ、ActiveXであっても、フォームツールであっても、チェックボックスがクリックされたときに
>そのチェックボックスが配置されているセルを Target といったセルオブジェクトで
>返してくれるなんて親切な構造にはなっていません。
>
>あくまで、クリックされたオブジェクトが何であるかがわかるだけで
>そのオブジェクト.TopLeftCell といったもので、その場所を把握する必要があります。
>
>配置しようとしているのは ActiveX ですか? フォームツールですか?
>いずれであってもアップされたコードでは動きませんが、いずれかによって
>正しいコードが異なってきますので。
・ツリー全体表示

【79013】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/4/14(金) 14:19 -

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

よく読むと Application.Caller を使っておられるので
フォームツールのチェックボックスなんですね。

であれば 値そのものは xlOn や xlOff でいいのですが
この場合は、自分でマクロを最初から最後まで書いて
それを チェックボックスにマクロ登録するわけですね。

名前を checkbox1_click とされるのは、勝手というか、すきにしたらいいのですが
 
Private Sub checkbox1_click(ByVal Target As Range)

この ( ) 内の引数、これは誰もセットしてくれません。

しかも、この形だと、マクロ登録しようにも、登録できません。

かつ、ActiveXであっても、フォームツールであっても、チェックボックスがクリックされたときに
そのチェックボックスが配置されているセルを Target といったセルオブジェクトで
返してくれるなんて親切な構造にはなっていません。

あくまで、クリックされたオブジェクトが何であるかがわかるだけで
そのオブジェクト.TopLeftCell といったもので、その場所を把握する必要があります。

配置しようとしているのは ActiveX ですか? フォームツールですか?
いずれであってもアップされたコードでは動きませんが、いずれかによって
正しいコードが異なってきますので。
・ツリー全体表示

【79012】Re:チェックボックスがONの場合に選択し...
発言  β  - 17/4/14(金) 13:12 -

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

ActiveX のチェックボックスの値は xlOn や xlOff ではなく True や Fales です。
・ツリー全体表示

【79011】Re:等間隔の行数取得
発言  boss  - 17/4/14(金) 12:42 -

引用なし
パスワード
   ▼γ さん:
早速のご回答ありがとうございます。
説明不足、vba素人につきお手数をお掛けしております。
いただいた質問への回答と「Exit Forでループを脱出しています」を
検証しておりますので結果についは後報いたします。
先ずは御礼です。
・ツリー全体表示

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