Excel VBA質問箱 IV

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

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


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

【79035】Re:等間隔の行数取得
発言  β  - 17/4/18(火) 9:33 -

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

横から失礼します。

bossさんとしては、『何かをしたい』んですよね。
それを「要件」と呼びましょうか。
で、その要件を実現するために、コードをあれこれ考えられるわけですよね。
それを コードレベルの「仕様」と呼びましょうか。

で、たとえば

 1.ttlrow2に行数を取得
 2.にてdict(key)の値をセット
 3.TからNTの範囲で、ttlrow2の行に罫線をひく

こう説明されたわけです。
でも、これって、あくまで、本当の要件ではなく要件を実現しようとして
bossさんが頭の中で作り上げられたコード仕様ですよね。
失礼ながら、もしかしたら、このコード仕様そのものが要件を実現するうえで
必ずしも適切なものではないかもしれません。

いいかえれば、回答側から見て、コード仕様を提示されても、なんのために何をしようとしているのかなと
そこがわかりづらくなります。

コードは横におき、

・どんなレイアウトのシートがある
・そこで、どんなことを判定し、条件ごとに どんなことをやりたい

そういうことを『言葉』で、明確に説明されてはいかがですか。
・ツリー全体表示

【79034】Re:二つのセルの数値の判定
お礼  トキノハジメ  - 17/4/18(火) 7:53 -

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

色々ありがとうございました。お騒がせして、すみませんでした。

プログラムのコードをよく見直して打ち込み直してちゃんと動きました。

以後気をつけます。

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

【79033】Re:等間隔の行数取得
発言  γ  - 17/4/18(火) 7:38 -

引用なし
パスワード
   >'3.以降の「あああ」行を取得
3.以降の「あああ」行は複数あるんでしょう?
それに対して、どんなことを実行したいのですか?
肝心なことが書かれていないので、改善策も書けない。
・ツリー全体表示

【79032】Re:二つのセルの数値の判定
発言  β  - 17/4/17(月) 21:26 -

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

あぁ、やっぱり掲示板上で手打ちで修正されたんですね。
本物のコードなら and には なりませんから。
And になります。

本物のコードを、なぜアップされないのですか?
・ツリー全体表示

【79031】Re:等間隔の行数取得
発言  γ  - 17/4/17(月) 21:25 -

引用なし
パスワード
   >   '3.以降の「あああ」行を取得
>   For row2 = ttlrow2 + 1 To maxrow
>     If sh1.Cells(row2, "K").Value = "あああ" Then
>       ttlrow2 = row2
>     End If
>   Next

  (ttlrow2 + 1)行 から maxrow行まで
  一行ずつ見ていって、"あああ"と一致はするけれども、
  単に、 ttlrow2 = row2 を実行しているだけですから。
  ttlrow2という変数に上書きしていっているだけです。

  ttlrow2 = row2
  に代えて、そこに、なにかしら実行したいことを書いたらどうですか?
・ツリー全体表示

【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 -

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

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