Excel VBA質問箱 IV

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

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


9447 / 13644 ツリー ←次へ | 前へ→

【27221】数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/2(火) 17:40 質問[未読]
【27222】Re:数式をVBAに置き換えたいのですが・・・ こうちゃん 05/8/2(火) 18:42 発言[未読]
【27226】Re:数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/2(火) 20:16 回答[未読]
【27228】Re:数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/2(火) 20:18 質問[未読]
【27230】Re:数式をVBAに置き換えたいのですが・・・ こうちゃん 05/8/2(火) 20:26 発言[未読]
【27236】Re:数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/3(水) 9:15 質問[未読]
【27223】Re:数式をVBAに置き換えたいのですが・・・ ichinose 05/8/2(火) 18:43 発言[未読]
【27227】Re:数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/2(火) 20:17 質問[未読]
【27244】Re:数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/3(水) 13:37 質問[未読]
【27269】Re:数式をVBAに置き換えたいのですが・・・ ichinose 05/8/3(水) 23:43 発言[未読]
【27275】Re:数式をVBAに置き換えたいのですが・・・ はじめて娘 05/8/4(木) 9:17 お礼[未読]

【27221】数式をVBAに置き換えたいのですが・・・
質問  はじめて娘  - 05/8/2(火) 17:40 -

引用なし
パスワード
   VBA初挑戦です。。。
以下の数式をについて、あまりにも数式が長いので、
VBAで出来ないものかな?と思い、挑戦してみることにしました。

<数式>
===============================================================
A2
=IF(COUNTIF(B2:E2,"ENG")=(COLUMNS(B2:E2)),"ENG",
IF(COUNTIF(B2:E2,"FRA")+COUNTIF(B2:E2,"ENG")=(COLUMNS(B2:E2)),"FRA",
IF(COUNTIF(B2:E2,"ITA")+COUNTIF(B2:E2,"ENG")=(COLUMNS(B2:E2)),"ITA",
IF(COUNTIF(B2:E2,"GER"),"GER",IF(COUNTIF(B2:E2,"ESP"),"ESP",
IF(COUNTA(B2:E2)=(COLUMNS(B2:E2)),"JPN",IF(COUNTA(B2:E2),"ITA","FRA")))))))
===============================================================

<コード>
================================================
Sub judgement()

Dim a As Integer  '"ENG"の数を数えていく
Dim b As Integer  '"FRA"の数を数えていく
Dim c As Integer  '"ITA"の数を数えていく
Dim d As Integer  '"GER"の数を数えていく
Dim e As Integer  '"ESP"の数を数えていく
Dim f As Integer  '"JPN"の数を数えていく
Dim i As Integer  '"列"の数を数えていく

For i = 2 To 5

  Cells(2, i).Select
  Select Case Cells(2, i).Value

    Case Is = "ENG"
      a = a + 1
    
    Case Is = "FRA"
      b = b + 1
    
    Case Is = "ITA"
      c = c + 1
    
    Case Is = "GER"
      d = d + 1
    
    Case Is = "ESP"
      e = e + 1
    
    Case Is <> "FRA"
      f = f + 1
    
  End Select
  
Next i

'B2〜E2:"ENG"=4のとき、A2="ENG"
  If a = 4 Then
    Range("A2").Value = "ENG"

'B2〜E2:"FRA"+"ENG"=4のとき、A2="FRA"
  ElseIf b + a = 4 Then
    Range("A2").Value = "FRA"
  
'B2〜E2:"ITA"+"ENG"=4のとき、A2="ITA"
  ElseIf c + a = 4 Then
    Range("A2").Value = "ITA"
 
'B2〜E2:"GER">=1のとき、A2="GER"
  ElseIf d >= 1 Then
    Range("A2").Value = "GER"

'B2〜E2:"ESP">=1のとき、A2="ESP"
  ElseIf e >= 1 Then
    Range("A2").Value = "ESP"
    
'B2〜E2:"JPN"=4のとき、A2="JPN"
  ElseIf f = 4 Then
    Range("A2").Value = "JPN"
    
'B2〜E2:"JPN">=1のとき、A2="ITA"
  ElseIf f >= 1 Then
    Range("A2").Value = "ITA"
    
'B2〜E2:上記条件以外のとき、A2="FRA"
  Else
    Range("A2").Value = "FRA"
  
  End If
  
End Sub
================================================

ですが、
B2:"-"
N2:"JPN"
O2:"JPN"
E2:"JPN"
と入力した結果、A2="JPN"にならずに、A2="ITA"になってしまいます。

どこが間違っているのか、教えていただけますでしょうか。

【27222】Re:数式をVBAに置き換えたいのですが・・...
発言  こうちゃん  - 05/8/2(火) 18:42 -

引用なし
パスワード
   はじめて娘さん、こんにちは

>For i = 2 To 5
>  Cells(2, i).Select
    :
    :
>Next i

このFor文では、B2、C2、D2、E2を調べていて・・

>B2:"-"
>N2:"JPN"
>O2:"JPN"
>E2:"JPN"
>と入力した結果、A2="JPN"にならずに、A2="ITA"になってしまいます。

上記の内容が入力されていても、C2、D2の値がJPN以外の場合
JPNは1個から3個なのでITAになりますよね。
C2、D2の値はどうなっていますか?


>
>どこが間違っているのか、教えていただけますでしょうか。

【27223】Re:数式をVBAに置き換えたいのですが・・...
発言  ichinose  - 05/8/2(火) 18:43 -

引用なし
パスワード
   ▼はじめて娘 さん:
こんばんは。

>VBA初挑戦です。。。
>以下の数式をについて、あまりにも数式が長いので、
>VBAで出来ないものかな?と思い、挑戦してみることにしました。
でも下のコードと比べると数式のほうが私には理解しやすいですよ!!

VBAコードの中でもCountif関数は

application.countif(range("b2:e2"),"ENG")

という書式で使用できます。

Columns関数と同じ結果は、

range("b2:e2").countで得られます。

Counta関数も Application.CountA(Range("b2:e2"))
でOKです。

これを使ってみては
いかがですか?

><数式>
>===============================================================
>A2
>=IF(COUNTIF(B2:E2,"ENG")=(COLUMNS(B2:E2)),"ENG",
>IF(COUNTIF(B2:E2,"FRA")+COUNTIF(B2:E2,"ENG")=(COLUMNS(B2:E2)),"FRA",
>IF(COUNTIF(B2:E2,"ITA")+COUNTIF(B2:E2,"ENG")=(COLUMNS(B2:E2)),"ITA",
>IF(COUNTIF(B2:E2,"GER"),"GER",IF(COUNTIF(B2:E2,"ESP"),"ESP",
>IF(COUNTA(B2:E2)=(COLUMNS(B2:E2)),"JPN",IF(COUNTA(B2:E2),"ITA","FRA")))))))
>===============================================================
>
><コード>
>================================================
>Sub judgement()
>
>Dim a As Integer  '"ENG"の数を数えていく
>Dim b As Integer  '"FRA"の数を数えていく
>Dim c As Integer  '"ITA"の数を数えていく
>Dim d As Integer  '"GER"の数を数えていく
>Dim e As Integer  '"ESP"の数を数えていく
>Dim f As Integer  '"JPN"の数を数えていく
>Dim i As Integer  '"列"の数を数えていく
>
>For i = 2 To 5
>
>  Cells(2, i).Select
>  Select Case Cells(2, i).Value
>
>    Case Is = "ENG"
>      a = a + 1
>    
>    Case Is = "FRA"
>      b = b + 1
>    
>    Case Is = "ITA"
>      c = c + 1
>    
>    Case Is = "GER"
>      d = d + 1
>    
>    Case Is = "ESP"
>      e = e + 1
>    
>    Case Is <> "FRA"
>      f = f + 1
>    
>  End Select
>  
>Next i
>
>'B2〜E2:"ENG"=4のとき、A2="ENG"
>  If a = 4 Then
>    Range("A2").Value = "ENG"
>
>'B2〜E2:"FRA"+"ENG"=4のとき、A2="FRA"
>  ElseIf b + a = 4 Then
>    Range("A2").Value = "FRA"
>  
>'B2〜E2:"ITA"+"ENG"=4のとき、A2="ITA"
>  ElseIf c + a = 4 Then
>    Range("A2").Value = "ITA"
> 
>'B2〜E2:"GER">=1のとき、A2="GER"
>  ElseIf d >= 1 Then
>    Range("A2").Value = "GER"
>
>'B2〜E2:"ESP">=1のとき、A2="ESP"
>  ElseIf e >= 1 Then
>    Range("A2").Value = "ESP"
>    
>'B2〜E2:"JPN"=4のとき、A2="JPN"
>  ElseIf f = 4 Then
>    Range("A2").Value = "JPN"
>    
>'B2〜E2:"JPN">=1のとき、A2="ITA"
>  ElseIf f >= 1 Then
>    Range("A2").Value = "ITA"
>    
>'B2〜E2:上記条件以外のとき、A2="FRA"
>  Else
>    Range("A2").Value = "FRA"
>  
>  End If
>  
>End Sub
>================================================
>
>ですが、
>B2:"-"
>N2:"JPN"
>O2:"JPN"
>E2:"JPN"
>と入力した結果、A2="JPN"にならずに、A2="ITA"になってしまいます。
>
>どこが間違っているのか、教えていただけますでしょうか。

【27226】Re:数式をVBAに置き換えたいのですが・・...
回答  はじめて娘  - 05/8/2(火) 20:16 -

引用なし
パスワード
   ☆こうちゃん様
ありがとうございます。

入力した結果を書き間違えていました。
申し訳ありません。
入力した値は、次のようになっています。
===============
B2:"-"
C2:"JPN"
D2:"JPN"
E2:"JPN"
===============
ですので、C2、D2は共に"JPN"が入力されています。

これは「質問」にしていいのでしょうか・・・

【27227】Re:数式をVBAに置き換えたいのですが・・...
質問  はじめて娘  - 05/8/2(火) 20:17 -

引用なし
パスワード
   ☆ichinose様
ありがとうございます。

>でも下のコードと比べると数式のほうが私には理解しやすいですよ!!
そうなんですか?
VBAはまだ始めたばっかりなので、私にはVBAは難しいなぁとは思っていたのですが。。。

>これを使ってみては
>いかがですか?
早速やってみます。
と言いたいところですが、これらに書き換えるのに時間がかかりそうです・・・


まだまだ、勉強不足です。。
また、分からなくなったときに質問させていただきます。

【27228】Re:数式をVBAに置き換えたいのですが・・...
質問  はじめて娘  - 05/8/2(火) 20:18 -

引用なし
パスワード
   間違って「回答」を選んでしまいました。
すみません・・・

【27230】Re:数式をVBAに置き換えたいのですが・・...
発言  こうちゃん  - 05/8/2(火) 20:26 -

引用なし
パスワード
   >入力した結果を書き間違えていました。
>申し訳ありません。
>入力した値は、次のようになっています。
>===============
>B2:"-"
>C2:"JPN"
>D2:"JPN"
>E2:"JPN"
>===============
>ですので、C2、D2は共に"JPN"が入力されています。

提示されたコードで当方で試験するとJPNが表示されます。

Case文で
    Case Is <> "FRA"
      f = f + 1

    Case Is = "JPN"
      f = f + 1

とするとITAが表示されますが、コードが違っているようなことはありませんよね?
全体を再度提示いただけませんか?

>これは「質問」にしていいのでしょうか・・・
質問でも発言でもいいんじゃないでしょか。

【27236】Re:数式をVBAに置き換えたいのですが・・...
質問  はじめて娘  - 05/8/3(水) 9:15 -

引用なし
パスワード
   ☆こうちゃん様
ありがとうございます。

入力した結果をまた、書き間違えていました。
何度もすみません、、、
入力した値は、次のようになっています。
===============
B2:"ITA"
C2:"JPN"
D2:"JPN"
E2:"JPN"
===============

この入力で試すと
数式では「JPN」と表示されるのに、VBAでは「ITA」と表示されます。

<数式>
IF(COUNTA(B2:E2),"ITA",

<VBA>
'B2〜E2:"JPN">=1のとき、A2="ITA"
  ElseIf f >= 1 Then
    Range("A2").Value = "ITA"

この数式部分(最後に記述している箇所)をVBAに書き換えたコードが間違いですか?

【27244】Re:数式をVBAに置き換えたいのですが・・...
質問  はじめて娘  - 05/8/3(水) 13:37 -

引用なし
パスワード
   ichinose様の回答をがんばって形にしてみました。
思い通りの動きになりました!!

間違っているところはありませんか??

===================================================================
Sub judgement3()

  If Application.CountIf(Range("M2:P2"), "ENG") = Range("M2:P2").Count Then
    Range("K2").Value = "ENG"
    
  ElseIf Application.CountIf(Range("M2:P2"), "FRA") + Application.CountIf(Range("M2:P2"), "ENG") = Range("M2:P2").Count Then
    Range("K2").Value = "FRA"
    
  ElseIf Application.CountIf(Range("M2:P2"), "ITA") + Application.CountIf(Range("M2:P2"), "ENG") = Range("M2:P2").Count Then
    Range("K2").Value = "ITA"
    
  ElseIf Application.CountIf(Range("M2:P2"), "GER") Then
    Range("K2").Value = "GER"
    
  ElseIf Application.CountIf(Range("M2:P2"), "ESP") Then
    Range("K2").Value = "ESP"
    
  ElseIf Application.CountA(Range("M2:P2")) = Range("M2:P2").Count Then
    Range("K2").Value = "JPN"
    
  ElseIf Application.CountA(Range("M2:P2")) Then
    Range("K2").Value = "ITA"
    
  End If
  
End Sub
===================================================================

【27269】Re:数式をVBAに置き換えたいのですが・・...
発言  ichinose  - 05/8/3(水) 23:43 -

引用なし
パスワード
   ▼はじめて娘 さん:
こんばんは。

>間違っているところはありませんか??
概、OKですけど・・・、数式と同じパターンにするなら、

>===================================================================
>Sub judgement3()
>
>  If Application.CountIf(Range("M2:P2"), "ENG") = Range("M2:P2").Count Then
>    Range("K2").Value = "ENG"
>    
>  ElseIf Application.CountIf(Range("M2:P2"), "FRA") + Application.CountIf(Range("M2:P2"), "ENG") = Range("M2:P2").Count Then
>    Range("K2").Value = "FRA"
>    
>  ElseIf Application.CountIf(Range("M2:P2"), "ITA") + Application.CountIf(Range("M2:P2"), "ENG") = Range("M2:P2").Count Then
>    Range("K2").Value = "ITA"
>    
>  ElseIf Application.CountIf(Range("M2:P2"), "GER") Then
>    Range("K2").Value = "GER"
>    
>  ElseIf Application.CountIf(Range("M2:P2"), "ESP") Then
>    Range("K2").Value = "ESP"
>    
>  ElseIf Application.CountA(Range("M2:P2")) = Range("M2:P2").Count Then
>    Range("K2").Value = "JPN"
>    
>  ElseIf Application.CountA(Range("M2:P2")) Then
>    Range("K2").Value = "ITA"
   else
    Range("K2").Value = "FRA"
'が抜けてました。
>  End If
>  
>End Sub
>===================================================================

後は、With文を使用したり、Range("M2:P2")やRange("M2:P2").Count は
予め変数に設定しておく等がありますが、それはおいおいやってみて下さい。

【27275】Re:数式をVBAに置き換えたいのですが・・...
お礼  はじめて娘  - 05/8/4(木) 9:17 -

引用なし
パスワード
   ☆ichinose様
ありがとうございます。

次のステップは2行目だけじゃなくて、下の行も使えるようにする・・・です。
がんばってみます。
でも、また質問するかもしれませんが・・・

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