[VBA] 셀값을 참조해서 범위 찾기

VBA
작성자
가람
작성일
2021-12-07 11:37
조회
174
엑셀버전 : M365

운영체제 : 윈도우10

단어 관련 암기를 돕기위해서 사용하고 있던 코드인데요. 
이번에는 "전범위"시트의 "F1"값을 참고해서 "H:K"열에 있는 "F1"값의 옆에 있는 범위 ex) F1= 1-5 일때 범위 "1-150"을
참조해서 만드는 코드를 만들고 싶습니다. 그러면 F1값만 변경해주고 버튼을 누르면 자동으로 내용이 단어 내용이 변경될 수 있게요!
솔직히 혼자 해보려고 했는데, 계속 안되서 도움 요청합니다.
보라색 부분을 변경하면 될것 같았는데 아닌가요? ㅠㅠ
---------------------------------------------------------------------------------------------------------
Option Explicit
 
Dim 자료 As Range
 
Sub 버튼_문제출제_클릭()
    Dim 번호     As Range
    Dim strSec   As String
    Dim fNum     As Long
    Dim arrSec   As Variant
    Dim myNum    As Variant
    Dim cnt      As Long
    Dim n        As Long
    Dim rndNum() As Variant
    Dim myData() As Variant
 
    Set 자료 = Sheets("DATA").[A1].CurrentRegion
    Set 번호 = Sheets("TEST").[A1].CurrentRegion
    Set 번호 = 번호.Offset(2, 1).Resize(번호.Rows.Count - 2, 1)
 
 
    '----------------------------------
    ' 초기화 - 랜덤, 기존자료, 머릿글
    '----------------------------------
    번호.Resize(, 2) = Empty ' 기존자료 삭제
    With Range("b2")
        ' 머릿글 설정
        If n = 1 Then
            .Resize(, 2) = Array("해석", "원문")
        Else
            .Resize(, 2) = Array("원문", "해석")
        End If
    End With
 
    '----------------------------------
    ' 랜덤 번호 가져오기
    '----------------------------------
    cnt = 번호.Rows.Count
    ReDim rndNum(1 To cnt)
    ReDim myData(1 To cnt, 1 To 2)
<span style="color: #800080;">    On Error GoTo Error_Handler
    strSec = InputBox("시작번호와 종료번호를 입력" & vbCr & vbCr & _
                        "ex) 12-" & 12 + cnt - 1, "시작 번호")
    If strSec = "" Then Exit Sub
    arrSec = Split(strSec, "-")
    If UBound(arrSec) <> 1 Then GoTo Error_Handler
    arrSec(0) = Val(Trim(arrSec(0)))
    arrSec(1) = Val(Trim(arrSec(1)))
    If arrSec(1) - arrSec(0) + 1 < cnt Or arrSec(1) > 자료.Rows.Count Then
        MsgBox "구간 입력이 잘못되었습니다.", 64, "입력 오류"
        Exit Sub</span>
    End If
    Call mkRandom(cnt, arrSec, rndNum)
    If Sheets("TEST").Shapes("옵션_해석").ControlFormat.Value = 1 Then
        For n = 1 To cnt
            myData(n, 1) = 자료(rndNum(n), 2).Value
        Next n
        번호.Value = myData
    Else
        For n = 1 To cnt
            myData(n, 1) = 자료(rndNum(n), 2).Value
            myData(n, 2) = 자료(rndNum(n), 3).Value
        Next n
        번호.Resize(, 2).Value = myData
    End If
 
    '----------------------------------
    ' 변수 메모리 초기화
    '----------------------------------
    Set 자료 = Nothing
    Exit Sub
Error_Handler:
    MsgBox Err.Description
End Sub
 
Sub mkRandom(ByVal Cont As Long, ByVal mySec As Variant, ByRef rndNum As Variant)
    Dim n   As Long
    Dim dpl As Boolean
    Dim ni  As Long
    Randomize
    For ni = 1 To Cont
        dpl = False
        Do Until dpl = True
            rndNum(ni) = Int(Rnd() * (mySec(1) - mySec(0) + 1) + mySec(0))
            dpl = True
            For n = 1 To ni - 1
                If rndNum(n) = rndNum(ni) Then dpl = False
            Next
        Loop
    Next
End Sub

------------------------------------------------------------------------------------------------------------------

회원등급 : 8레벨
포인트 : 603 EP
총질문 : 15 개 (마감율 : 80%)
채택답변 : 0 개
전체 2

  • 2021-12-09 00:28

    구현하고 싶은 것이
    문제번호를 입력하는 방식에서
    구간으로 입력하기를 원하는 건가요?
    현재 I, K 컬럼의 값을 입력하는 것을
    이에 대응하는 H,J 컬럼 값으로 입력하기를 원하는 것인가요?

    - 입력받은 번호 범위를 DATA 시트의 A컬럼으로 가져오는
    로직인듯 한데,

    - 위와 같이 하려면
    arrSec(0) = Val(Trim(arrSec(0)))
    arrSec(1) = Val(Trim(arrSec(1)))

    각 번호는 30개로 대응되므로
    위 구문 아래에 아래 코드를 삽입하면 될 듯 싶습니다.

    arrSec(0) = (arrSec(0)-1)*30 +1
    arrSec(1) = (arrSec(1)-0)*30 + 0 '// 리듬 감을 주기 위해, -0, +0 사용


    • 2021-12-09 12:25

      @야휘 님 답변 감사합니다.
      제가 올려드린 코드를 구동하면 범위를 입력하는 메세지박스가 뜨는데, 그부분을 자동으로 할수있게 줄이고 싶었던 거라서요.

      지금은 단어를

      "F1"값에 진도를 복사해 넣고, "H:K"열에 있는 "F1"값의 옆에 있는 범위 ex) F1= 1-5 일때 범위 "1-150"를 복사해서 메세지 박스에 붙여넣어서
      단어가 랜덤으로 변경되는 방식인데 복사해서 붙여넣는 이 과정을 줄이고 싶어서요.

전체 5,201
번호 카테고리 제목 작성자 작성일 추천 조회
알림
하루 딱 "1분", 진짜 쓰는 엑셀 꿀팁 👉 "오빠두엑셀" 인스타그램 오픈! (30)
트로피 오빠두엑셀 | 2021.10.12 | 추천 23 | 조회 796
트로피 오빠두엑셀 2021.10.12 23 796
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (21)
오빠두엑셀 | 2021.10.28 | 추천 32 | 조회 2478
트로피 오빠두엑셀 2021.10.28 32 2478
26343 함수/공식
New 전산입고품목과 실제입고품목의 실재고조사관련 양식(함수+피벗테이블)첨언좀 부탁드립니다.도와주세요! 첨부파일 (2)
sunjong**** | 16:42 | 추천 0 | 조회 21
sunjong**** 16:42 0 21
26341 VBA
New VBA 내 배열 통합(쿼리 통합 기능을 VBA에서 구현하고자 합니다.) 첨부파일
병욱 | 16:13 | 추천 0 | 조회 12
병욱 16:13 0 12
26339 VBA
New 많은 텍스트상자안 문자 찾기 (1)
noeu**** | 15:44 | 추천 -1 | 조회 17
noeu**** 15:44 -1 17
26338 함수/공식
New 지정한 일수(days)를 달력에 자동으로 표시 되게끔 설정이 가능한가요? 첨부파일 (1)
말창 | 15:26 | 추천 0 | 조회 18
말창 15:26 0 18
26336 함수/공식
New 셀안 동일 회사명을 순차 카운트를 하고 싶습니다. (3) 답변완료
sickp**** | 15:06 | 추천 0 | 조회 20
sickp**** 15:06 0 20
26334 함수/공식
New 이름만 치면 열 다 띄워주는 방법을 알려주세요 첨부파일 (7) 답변완료
아마테라스 | 14:49 | 추천 0 | 조회 28
아마테라스 14:49 0 28
26329 VBA
New VBA 자동으로 그룹 구분하여 sheet split 기능 행열 전환 관련 질문드립니다. 첨부파일
shon**** | 13:53 | 추천 0 | 조회 11
shon**** 13:53 0 11
26324 기능/도구
New 파일 오류로 열리지 않습니다. (1)
가을남자 | 12:48 | 추천 0 | 조회 16
가을남자 12:48 0 16
26323 함수/공식
New 불려오는 data 행 길이에 따라 자동으로 행길이 바뀌도록 하는 수식/기능 관련 첨부파일 (1)
엑초파 | 12:16 | 추천 0 | 조회 28
엑초파 12:16 0 28
26308 VBA
New pdf 로 자동 저장하고 싶습니다. 첨부파일
wan**** | 04:36 | 추천 0 | 조회 35
wan**** 04:36 0 35
26295 파워쿼리/피벗
New 피벗테이블 '각 필드에 유지할 항목 수'에서 질문입니다. (3)
월마리아 | 2022.01.23 | 추천 0 | 조회 30
월마리아 2022.01.23 0 30
26294 함수/공식
New 합계값이 일치하지 않는 값 구하기! (1)
정해인 | 2022.01.23 | 추천 0 | 조회 34
정해인 2022.01.23 0 34
26290 함수/공식
New 기간구분 IF함수 에러 원인이 뭔지 모르겠어요 (6) 답변완료
마운틴 | 2022.01.23 | 추천 0 | 조회 38
마운틴 2022.01.23 0 38
26285 함수/공식
New 이번주 시작일(월요일), 마지막일(금요일) yyyy-mm-dd 형식으로 출력하는 방법 (1)
joeee | 2022.01.23 | 추천 0 | 조회 37
joeee 2022.01.23 0 37
26284 피벗테이블
New 피벗 테이블 날짜인식 및 월별 그룹화 관련 첨부파일 (3)
baechu9 | 2022.01.23 | 추천 0 | 조회 31
baechu9 2022.01.23 0 31
26278 피벗테이블
New 피벗테이블 영상보면서 따라해보고 있는데요 잘안되요 ㅠ 첨부파일 (1)
희야맘 | 2022.01.23 | 추천 0 | 조회 23
희야맘 2022.01.23 0 23
26276 문서서식
New [조건부 서식] 아직 데이터가 입력되지 않은 칸에 조건부 서식 적용하지 않도록 하기 첨부파일
jo2 | 2022.01.23 | 추천 0 | 조회 33
jo2 2022.01.23 0 33
26268 함수/공식
New 조건부서식 내에서 INDIRECT 함수와 AND 함수를 함께 사용할 수 없나요? (10)
나는나 | 2022.01.22 | 추천 0 | 조회 66
나는나 2022.01.22 0 66
26260 함수/공식
New 각 지점별 연,월 매출의 합을 구하고 싶습니다. 첨부파일 (4) 답변완료
창이 | 2022.01.22 | 추천 1 | 조회 44
창이 2022.01.22 1 44
26246 함수/공식
New 엑셀 월 구하기 주 구하기 질문 입니다. 첨부파일 (3)
천고마비 | 2022.01.22 | 추천 0 | 조회 45
천고마비 2022.01.22 0 45
26243 함수/공식
특정 조건 행 제외 후 다른 시트에 리스트화 첨부파일 (4) 답변완료
상큼한도로시 | 2022.01.21 | 추천 0 | 조회 48
상큼한도로시 2022.01.21 0 48
26239 VBA
재고관리 프로그램에서 검색할 때 체크박스 사용하는 방법이 궁금합니다. (1)
엑셀열공 | 2022.01.21 | 추천 0 | 조회 54
엑셀열공 2022.01.21 0 54
26237 피벗테이블
시간표시막대 질문 (1)
최재영 | 2022.01.21 | 추천 0 | 조회 40
최재영 2022.01.21 0 40
26236 함수/공식
컨트롤 f (찾기) 로 함수의 결과값 검색방법이 있나요? (1)
정지훈 | 2022.01.21 | 추천 0 | 조회 34
정지훈 2022.01.21 0 34
26234 함수/공식
함수를 대량변경하고싶은데 가능한지 문의드립니다. (1)
정지훈 | 2022.01.21 | 추천 0 | 조회 42
정지훈 2022.01.21 0 42
26229 함수/공식
함수를 어떤걸 써야 될지 모르겠습니다. 첨부파일 (3) 답변완료
조커 | 2022.01.21 | 추천 0 | 조회 57
조커 2022.01.21 0 57
26223 VBA
버튼이 클릭이 되지 않습니다. 방법을 모르겠어요. 첨부파일 (5)
다르마 | 2022.01.21 | 추천 0 | 조회 43
다르마 2022.01.21 0 43
26222 VBA
자료찾기 vba 문의드립니다. (2) 답변완료
ㅈㄱㄹ | 2022.01.21 | 추천 0 | 조회 44
ㅈㄱㄹ 2022.01.21 0 44
26220 함수/공식
엑셀 셀값 동일 데이터를 순서대로 카운터 하고 싶습니다. (4) 답변완료
sickp**** | 2022.01.21 | 추천 0 | 조회 41
sickp**** 2022.01.21 0 41
26217 VBA
엑셀 매크로 렉걸림해결방법문의 (1)
dud**** | 2022.01.21 | 추천 -1 | 조회 36
dud**** 2022.01.21 -1 36