Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2013)
excel vbaと .net framework3.5について。
投稿日時: 20/09/06 21:23:26
投稿者: kohkoh

 以下のプログラムはそれぞれのセルに例えばAAAAなら10 CCCCなら2を返すプログラムです。
(こちらのサイトで質問して作成していただいたものです。)
パソコンが新しくなってからプログラムが動かなくなりました。
 
Sub test()
  
    Dim al As Object
    Dim r As Range
    Dim c As Range
    Dim w As Variant
    Dim v As Variant
    Dim x As Long
      
Worksheets("sheet1").Select
      
      
    Set al = CreateObject("System.Collections.ArrayList")
    Set al = GetObject("System.Collections.ArrayList")

     
    With Range("J7", Range("J" & Rows.Count).End(xlUp))
        ReDim v(1 To .Rows.Count, 1 To 1)
        For Each r In .Resize(, 4).Rows
            x = x + 1
            al.Clear
            For Each c In r.Cells
                al.Add c.Value
            Next
            al.Sort
            w = Join(al.toarray, "")
            Select Case w
                Case "AAAA": v(x, 1) = 10
                Case "AAAB": v(x, 1) = 9
                Case "AAAC": v(x, 1) = 8
                Case "AABB": v(x, 1) = 8
                Case "AABC": v(x, 1) = 7
                Case "ABBB": v(x, 1) = 7
                Case "AACC": v(x, 1) = 6
                Case "ABBC": v(x, 1) = 6
                Case "BBBB": v(x, 1) = 6
                Case "ABCC": v(x, 1) = 5
                Case "BBBC": v(x, 1) = 5
                Case "ACCC": v(x, 1) = 4
                Case "BBCC": v(x, 1) = 4
                Case "BCCC": v(x, 1) = 3
                Case "CCCC": v(x, 1) = 2
            End Select
        Next
    End With
      
    Range("O7").Resize(UBound(v, 1)).Value = v
 
      
End Sub
 
 下の2行でエラーになります。
 Set al = CreateObject("System.Collections.ArrayList")
 Set al = GetObject("System.Collections.ArrayList")

 
 エラーメッセージを調べると、.net framework3.5がインストールされていないことが原因みたいだとわかりました。その後、.net framework3.5のインストールを何度も試みましたがインストールができませんでした。(.net framework4.8はインストールされています。)
(パソコンは支給品で管理者権限はあります。サーバーはwindows serverです。)
 
.net framework3.5がインストールされていない状態で動くようになるのでしょうか。
 
どなたか良い解決方法がありましたら、教えていただけないでしょうか。
 

回答
投稿日時: 20/09/06 22:10:41
投稿者: simple

私の手元の環境と違うので自信はありませんが、
https://qiita.com/minoru-nagasawa/items/fcd317fa58c2372f681d
に記載のある、「Windowsの機能の有効化または無効化」の状況を確認してみて下さい。

回答
投稿日時: 20/09/06 23:05:37
投稿者: 半平太

>それぞれのセルに例えばAAAAなら10 CCCCなら2を返すプログラムです。
本題からそれますが、Aが2、Bが1、持ち点が2、と言う感じでよければ、こんなのでいけそう。
 

Sub test2()
    Dim Ws As Worksheet
    Dim rRows As Range
    Dim r As Range
    Dim v As Variant
    Dim x As Long
    
    Set Ws = Worksheets("Sheet1")    
    Set rRows = Ws.Range("J7", Range("J" & Rows.Count).End(xlUp)).Resize(, 4).Rows
    ReDim v(1 To rRows.Rows.Count, 1 To 1)
    
    For Each r In rRows
        x = x + 1
        v(x, 1) = Ws.Evaluate("SUM(Countif(" & r.Address & ",{""A"",""B""})*{2,1})") + 2
    Next
    
    Range("O7").Resize(UBound(v, 1)).Value = v
End Sub

回答
投稿日時: 20/09/07 10:53:32
投稿者: mattuwan44

Sub test()
    Dim r As Range
    Dim v As Variant
    
    With Worksheets("Sheet1").Range("J:J")
        Set r = Application.Range(.Cells(7), .Cells(.Count).End(xlUp)).Resize(, 4)
    End With
    
    v = r.Value
    
    With r
        .Replace "A", 2
        .Replace "B", 1
        .Replace "C", 0
    End With
    
    With r.Columns(7)
        .Formula = "=Sum(" & r.Rows(1).Address(False, True) & ")+2"
        .Value = .Value
    End With
    
    r.Value = v
End Sub

 
Excel君でできることはエクセル君に任せてみては?
こんなんじゃ重いですかね?

投稿日時: 20/09/08 22:46:08
投稿者: kohkoh

助言して頂きありがとうございます。コメントを参考にさせていただきます。
お忙しい中、本当にありがとうございました。